3 Javascript初识

什么是javaScript

简介

javascript是一门世界上最流行的脚本语言!

一个合格的后端人员,必须精通js

ecmascript它可以理解为是一个javascript的标准

最新版本已经到es6版本

但是大部分浏览器还只是停留在支持es5代码上

快速入门

IDEA修改提示

image-20200607082917172

引入javascript

  1. 行内写法 一般写在body的最下面或者head里面

    //script 的默认类型type是javascript
    <script>
        alert("hello world!");
    </script>
    
  2. 外部引入(注意script标签必须成对出现

<script src="js/javascript.js"></script>

基本语法入门

javascript 严格区别大小写
//1、 定义变量 变量类型 变量名=变量值;
var num=1;
//2、 条件控制
if(2>1){
	alert("true");
}
注释 单行// 多行/**/

学会调试

1、输出变量

在浏览器的控制台打印变量
alert(变量)
console.log(变量) 推荐

image-20200607083639831

2、打断点调试

打断点

image-20200607083949663

刷新页面

下一步

image-20200607084014979

3、浏览器调试

image-20200607084446842

数据类型

数值文本图像音频视频

数值

number js不区分小数和整数

NaN not a number
123 
Infinity 无限大
12.345 
-99 

字符串

'abc' "abc"

布尔值

true false

逻辑运算符

&&
||
!

比较运算符

=   赋值    
==  等于(类型不一样,值一样,也会判断为true)
=== 绝对等于(类型一样,值一样,结果true)
坚持不要使用==
"1"==1
>true
"1"===1
>false
NAN===NAN,
>false
NAN与所有的数值都不相等,包括自己。

nulllundefined

  • null 空
  • undefined未定义

数组

var arr=['1',2,4,null ,true];

取数组下标,如果越界 undefined

对象

对象是大括号,数组是中括号

每一个属性之间使用逗号隔开,最后一个不需要添加

var person={
    name:"姓名",
    age:3,
    hobby:['sing','dance','rap']    
}

严格检查模式

<!--
    前提:IDEA需要设置ES6语法
    ‘use strict' 严格检查模式 预防javascript的随意性导致的问题
    必须写在第一行才能生效检查模式
    i=1;//全局变量 就会报错
    局部变量建议使用let 去定义
-->
<script>
    'use strict';
    let i=1;
</script>

数据类型

字符串

1、正常字符串需要使用 单引号或双引号 包裹

2、注意转义字符 \

3、多行字符编写

var a= `你好
hello world
我觉得
`;

 let name="小明";
 let intro=`你好呀 ${name} `

4、模板字符串

let name="小明";
let intro=`你好呀 ${name} `

5、字符串的长度

var test="test"

test.length

6、字符串的可变性和不可变性

test[0]=1
console.log(test[0])
>"t"

7、大小写转换

test.toLocaleLowerCase()
test.toLocaleUpperCase()

8、字符串截取

test.substring(1)
test.substring(1,3) [1,3)

数组

1、长度

arr.length

2、indexOf 通过元素获得下标索引

arr.indexOf(2)
> 1

3、slice()

截取Array的一部分,返回一个新数组,类似于String中的substring

var arr=[1,2,3,4,5,6];
arr.slice(3) 从arr[3]开始截取
[4, 5, 6]
arr.slice(2,5) [2,5)
[3, 4, 5]

4、push pop

push:压入尾部
pop:弹出尾部的一个元素

5、unshift、shift()头部

unshift:压入头部
shift:弹出头部的一个元素

6、sort()

7、元素反转reverse()

8、连接符 join

打印拼接数组 - 使用特定数组串连接

arr.join("-")
"1-2-3-4-5-6"

对象

1、若干个键值对

var 对象名 ={
	属性名:属性值,
	属性名:属性值,
	属性名:属性值
}

2、使用一个不存在的对象属性 不会报错 undefined

person.hhah
undefined

Map 和 Set

Map

var map= new Map([['one',100],['two',200]]);
map.get('one') //通过key获得value
map.set('three',300) //新增
map.delete('three')//删除

Set 无序不重复的集合

var set=new Set([3,1,1,4,5,7,5])
set.add(6)
set.delete(6)

iterator

es6新特性

//遍历map
var map= new Map([['one',100],['two',200]]);
var nums=[1,2,3,4,5];
for(var i of map){
    console.log(i);
}
//遍历set
var set=new Set([3,1,1,4,5,7,5]);
for(var i of set){
    console.log(i);
}

流程控制

if while for

数组循环

var nums=[1,2,3,4,5];
for(i in nums){
    console.log(nums[i]);
}
for(var i of arr){
    console.log(i);
}

函数

函数定义

定义方法一

function add(x,y){
    return x+y;
}

定义方法二

var sub  = function(x,y){
    return x-y; 
};

调用函数

sub(10,2);

参数问题!!!:javascript 可以传任意个参数,也可以不传递参数

当类型不匹配——手动自定义异常

var sub  = function(x,y){
    if(typeof x !=='number'){
        throw 'x Not a number';
    }
    if(typeof y !=='number'){
        throw 'y Not a number';
    }
    return x-y;
};
console.log(sub('a','b'));

当传入的参数过多,获得所有参数

rest参数只能写在最后面,必须用...标识

var show  = function(x,y,...rest){
    console.log(x);
    console.log(y);
    console.log(rest);
};
输出结果
1
2
[4, 5, "a"]

变量作用域

var 在函数体中声明,则在函数外不可以调用

提升变量的作用域

function qj(){
    var x = 'x' + y;
    console.log(x);
    var y = 'y';
}

等价于

function qj(){
    var y;
    var x='x'+y;
    console.log(x);
    y='y';
}

结果:xundefined
说明:js执行引擎,自动提升y的声明,但是不会提升y的赋值

养成规范:所有变量的定义都放在函数的头部,不要乱放,便于代码维护

var x,
    y,
    z,
    a;
x=1;
y=2;

全局函数

全局对象 window

<script>
var x="123";
window.alert(x);
alert(window.x);//默认所有的全局变量绑定在window对象上
</script>

使用var声明变量,在方法内部是局部变量,在方法外部是全局变量

规范

由于我们所有的全局变量都会绑定到我们的window上,如果不同的js文件,使用了相同的变量,冲突->如何减少冲突?

//定义唯一的全局变量
var DJApp = {};
//赋值
DJApp.name='DJ';
DJAPP.add=function(a,b){
    return a+b;
};
console.log(DJApp.add(1,2));

把自己代码全部放入自己定义的唯一命名空间中,降低全局命名冲突的问题

局部作用域 let

for(var i = 0;i<10;i++){}
console.log(i);//问题 出了作用域还是可以输出
for(let i = 0;i<10;i++){}
console.log(i);

常量 const

const PI=3.14;
console.log(PI);

方法

var dj = {
    name:'DJ',
    birth:2000,
    age:function(){
        var now = new Date().getFullYear();
        return now - this.birth;
    }
}
//调用方法一定要带括号
console.log(dj.age())

拆开上面的代码

//单独调用getAge this指向window(×)而非单独this指向dj(√)
getAge = function(){
    var now = new Date().getFullYear();
    return now - this.birth;
};
var dj = {
    name:'DJ',
    birth:2000,
    age:getAge//不需要括号
}
console.log(dj.age())

特殊对象

标准对象

typeof 123
"number"
typeof '123'
"string"
typeof true
"boolean"
typeof []
"object"
typeof {}
"object"
typeof Math.abs
"function"
typeof undefined
"undefined"

Date

基本使用

var now=new Date();
now.getFullYear();
now.getMonth();//0-11
now.getDate();//日
now.getDay();//星期
now.getHours();
now.getMinutes();
now.getSeconds();
now.getTime();//获得时间戳 全世界统一
console.log(now.getTime());
console.log(new Date(now.getTime()));//时间戳转为时间
now.toLocaleString();//本地时间

Json

var user={
    name:"qin",
    age:10
}
//对象转化为JsON字符串
j_user=JSON.stringify(user);
//JsOn字符串转为对象
new_user=JSON.parse('{"name":"qin","age":10}');

Ajax请求

面向对象编程

class关键字,在ES6引入的

1、定义类(属性、方法)

class Student{
    //构造器
    constructor(name){
        this.name=name;
    }
    hello(){
        alert(`${this.name} 你好!`)
    }
}
var stu = new Student("小明");
stu.hello();

2、继承

class Student{
    //构造器
    constructor(name){
        this.name=name;
    }
    hello(){
        alert(`${this.name} 你好!`)
    }
}
class XiaoStudent extends Student{
    constructor(name,grade){
        super(name);
        this.grade=grade;
    }
    intro(){
         alert(`${this.name} 的自我介绍`);
    }
}
var stu = new Student("小明");
var xiao = new XiaoStudent("小红","三年级");

操作BOM对象

JavaScript和浏览器的关系?

javaScript诞生是为了让他能在浏览器中运行

BOM:浏览器对象模型

  • IE6-11
  • Chrome
  • Safari
  • FixFox

window

window代表 浏览器窗口

navigator

navigator 封装了浏览器信息

navigator.appCodeName
> "Mozilla"
navigator.appName
> "Netscape"
navigator.platform
> "Win32"

大多数我们不会使用navigator ,因为navigator内容会被人为修改。

screen

//代表屏幕尺寸
screen.width
> 1536
screen.height
> 864

location(*)

location 代表当前页面的url信息

host: "www.baidu.com" //主机
href: "https://www.baidu.com/?tn=78040160_14_pg&ch=8"
protocol: "https:"//协议
reload: ƒ reload()//刷新网页 location.reload()
//跳转到新的网站
location.assign('https://baidu.com');

document

document 代表当前的页面

获得网页标题

document.title
> "小游戏,4399小游戏,小游戏大全,双人小游戏大全 - www.4399.com"
document.title="DJ"
> "DJ"
//获取具体的文档数节点

获得cooki

document.cookie

history

代表浏览器的历史记录

history.back();
history.forward();

操作DOM对象(重点)

核心

浏览器网页就是一个Dom树形结构

更新:更新DMO节点

遍历dom节点:得到dom节点

删除:删除一个dom节点

添加:添加一个新的节点‘

获得DEOM节点

//对应css的选择器,注意Name结尾的都是集合
console.log(document.getElementsByTagName('h1'));
console.log(document.getElementById('p1'));
console.log(document.getElementsByClassName('p2'));

这是原生代码,之后尽量都使用jQuery

更新DOM节点

p1.innerText修改文本的值

<p id="p1">ppppp</p>
<script>  
    p1=document.getElementById('p1');
</script>

p1.innerHTML可以解析HTML文本标签

p1.innerHTML='<strong>123<strong>'

设置css

p1.style.color='red'
p1.style.fontSize='30px' //用驼峰
let body=document.getElementsByTagName('body');
body[0].style.background="yellow";
let five = document.getElementsByClassName('five');
five[0].style.color="blue";

删除DOM节点

删除节点的步骤,先找到父节点,再用父节点删除

<body>
<div id="app">
    <h1>标题</h1>
    <p id="p1">ppppp</p>
    <p class="p2">qqqqq</p>
</div>
    
<script>
    //方法一
    father = document.getElementById('app');
    child=document.getElementById('p1');
    father.removeChild(child);
    //方法二 删除三个,这是一个动态的过程 children 属性是在时刻变化的
    father.removeChild(father.children[0]);
    father.removeChild(father.children[0]);
    father.removeChild(father.children[0]);
</script>

插入DOM节点

移动节点

<div id="list">
    <p id="one">one</p>
    <p id="two">two</p>
    <p id="three">three</p>
</div>

<script>
    let list=document.getElementById("list");
    let js=document.getElementById("js");
    list.append(js);//js就移动了位置
</script>

新建一个结点

let four=document.createElement('p');
four.id="four";
four.innerText="four";
list.append(four);

操作表单

取值

输入框

var id = document.getElementById('id');
console.log(id.value)

单选框

<div>
    <span>姓别:</span>
    <input type="radio" name="sex" value="0" id="boy">男
    <input type="radio" name="sex" value="1" id="girl">女
</div>
boy.checked 
> true/false

提交表单

<button type="submit" onclick="check()">提交</button>
check = function () {
    let uname=document.getElementById('id').value;
    let pwd=document.getElementById('pwd').value;
    alert(`${uname} ${pwd}`);
}

JQuery

image-20200608194122292

javaScript 和 JQuery

JQuery库,里面存在大量的javascript函数

获取

一、在线cdn引入

百度搜索 jquery cdn

https://wwwindex.bootcdn.cn/jquery/ 比如

image-20200608193117848

二、官网下载

https://jquery.com/

image-20200608193725096

点击进入之后点击右键另存为会保存成一个js文件,(我下载未压缩的)

image-20200608193917656

公式:$(selector).action()

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
</head>
<body>
<a href="" id="test">click</a>
<script>
    //选择器就是css的选择器
    $('#test').click(function () {
        alert('hello');
    })
</script>
</body>
</html>

选择器

很好的参考文档

事件

鼠标事件 键盘事件

image-20200608195826623

//当网页加载完之后响应
$(function(){
      //....  
});

操作DOM

节点文本操作

$('#test-ul li[name=li]').text();//获得值
$('#test-ul li[name=li]').text('now js');//设置值
$('#test-ul li[id=css]').html();
$('#test-ul li[id=css]').html('<B>Css</B>');

css操作

$('#test-ul li[name=li]').css({"color":"red"})

元素的显示和隐藏 ,本质是display:none

$('#test-ul li[name=li]').show();
$('#test-ul li[name=li]').hide();

项目练习

在网页F12删除一行一行的,看哪一些没有影响的删除,有影响的好好看看

image-20200608203705417

再右键copy复制到IDEA

image-20200608203839149

猜你喜欢

转载自www.cnblogs.com/10134dz/p/13161498.html
今日推荐