19-3-27 js(1)
- 基本内容
- 特性
基本内容
js可以直接写在html中,但是不美观,可以在头部进行外部引用,即可引用目录文件下的js文件,也可以引用网络资源。 - var 进行赋值 也可以直接定义 会被声明为全局变量,影响其他js脚本的执行,可以在开头添加’use strict’来避免这个错误
- 语句集合{}, 每个语句后加; 注释//
- 浮点数存在误差 1/3 不等于 1-2/3
- var student = {name:bob,id:”ASD123”}对象
- function double(arg1,…){} 函数 自带arguments关键词 例如arguments.length
- var [a,c,..] = [1,2,..]解构赋值
- 对象中可以添加方法。 对象中this指向本身
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18function add(){
var y = this.num + 1;
return y;
}
var number = {
num: 1,
addo: add
};
number.addo();
add.apply(number,[]);
var num = {
number : 1,
add : function (){
number = 1;
return this.number + 1;
}
}
num.add(); - 箭头函数 funcname = (arg1,….)=>{} 箭头函数明确指明了this指向该函数内 对象外可以通过apply来对this进行指向
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var num = {
number : 1,
add : ()=>{
return this.number + 1;
}
}
num.add.apply(num,[]);
'use strict'
var num = {
//number : 1,
add : ()=>{
number = 1;
return this.number + 1;
}
}
num.add();
特性
1,js自动在行尾添加“;”
1 | return//这样的return存在错误,因为行尾会自动加上; 就变成了 retrun; |
2,“==” 与 “===”
在其他语言中一般用“==”进行判断时会同时判断类型,但js不一样,js使用“===”才会同时判断类型跟数值,使用“==”很可能会产生一些奇奇怪怪的错误。
3,异步执行
因为js是单线程,所以执行是异步执行,在处理一些需要分步执行的函数不能简单进行罗列。
1 |
4,变量提升
所有申明的变量会提升到顶部,但不代表赋值会提升到顶部。
5,全局作用域
函数内的变量只存在于函数内,但上一层的变量,下一层函数可以使用。不存在任何函数内的变量就是存在于全局作用域。js默认有一个全局对象window。
1 | var num = 10; |
6,高阶函数
可以理解为函数中的函数
- map 作用于数组每个参数的函数
1
2
3
4function double(x){return 2*x;};
var num = [1,2,3];
var result = num.map(double);//2.4,6
//在我python爬虫二中 因为获取的链接都存在一个数组里 就可以通过这个思路来批量处理 - reduce 把函数作用于数组进行累积运算
1
2var num = [1,2,3];
var result = num.reduce((x,y)=>{return x*y;});//result = 6 - filter 剔除某些元素
1
2var num = [1,2,3,4];
var result = num.filter((x)=>{return x%2 !== 0;})//true 保留, false丢弃 - sort 排序与上面类似默认x<y返回-1,x==y返回0,x>y返回1
- 闭包 返回函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16var sum = [1,2,3,4];
function number(arr){
return{
inc: ()=>{return arr.reduce((x,y)=>{return x+y;})}
//mul: ()=>{return arr.reduce((x,y)=>{return x*y;})}
}
}
c1 = number(sum);
c1.inc();
//当然也可以这样,区别在于上一个创建后没有直接使用,在之后的调用才使用
var sum = [1,2,3,4];
function number(arr){
return arr.reduce((x,y)=>{return x*y;})
}
number(sum); - 生成器 能够多次返回参数
1
2
3
4
5
6
7
8function* add(x){
yield x;
yield x+1;
return ;
}
c = add(2);
c.next().value;//2
c.next().value;//3
包装对象
1 | var num = new Number(123);//是一个object对象 |
面向对象
- 对象的原型可以进行指向
1 | var num = { |
当创建一个对象,它会有一条原型链条。例如var arr=[1,2,3]其原型链条 arr —-> Array.prototype —-> Object.prototype —-> null 而Array.prototype提供了indexOf()这些方法。
也可以用构造函数来创建对象
1 | function num (number){ |
当创建很多mynum时,每一个的print()函数都是独立的,如果想共用,可以将print()移到外面
1 | function num (number){ |
不过还是用经典的class舒服一些
1 | class num { |
参考
19-3-27 js(1)