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
    18
    function 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

    'use strict'
    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
2
return//这样的return存在错误,因为行尾会自动加上;   就变成了 retrun;
x;

2,“==” 与 “===”

在其他语言中一般用“==”进行判断时会同时判断类型,但js不一样,js使用“===”才会同时判断类型跟数值,使用“==”很可能会产生一些奇奇怪怪的错误。

3,异步执行

因为js是单线程,所以执行是异步执行,在处理一些需要分步执行的函数不能简单进行罗列。

1
2


4,变量提升

所有申明的变量会提升到顶部,但不代表赋值会提升到顶部。

5,全局作用域

函数内的变量只存在于函数内,但上一层的变量,下一层函数可以使用。不存在任何函数内的变量就是存在于全局作用域。js默认有一个全局对象window。

1
2
3
4
var num = 10;
window.num;//10
function func{console.log("123");};
window.func;//123

6,高阶函数

可以理解为函数中的函数

  • map 作用于数组每个参数的函数
    1
    2
    3
    4
    function double(x){return 2*x;};
    var num = [1,2,3];
    var result = num.map(double);//2.4,6
    //在我python爬虫二中 因为获取的链接都存在一个数组里 就可以通过这个思路来批量处理
  • reduce 把函数作用于数组进行累积运算
    1
    2
    var num = [1,2,3];
    var result = num.reduce((x,y)=>{return x*y;});//result = 6
  • filter 剔除某些元素
    1
    2
    var 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
    16
    var 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
    8
    function* add(x){
    yield x;
    yield x+1;
    return ;
    }
    c = add(2);
    c.next().value;//2
    c.next().value;//3

包装对象

1
2
3
4
var num = new Number(123);//是一个object对象
typeof num; //object
num === 123 //false
num == 123 //true

面向对象

  • 对象的原型可以进行指向
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var num = {
number : 1,
print : function(){
console.log("my num is " + this.number);
}
};

var mynum = {
number : 2
};

mynum.__proto__ = num;//一般很少用
mynum.print();// my num is 2
numobj = Object.create(num);
numobj.number = 10;
numobj.print();//my num is 10
  • 当创建一个对象,它会有一条原型链条。例如var arr=[1,2,3]其原型链条 arr —-> Array.prototype —-> Object.prototype —-> null 而Array.prototype提供了indexOf()这些方法。

  • 也可以用构造函数来创建对象

1
2
3
4
5
6
7
8
9
10
function num (number){
this.number = number,
this.print = function(){
console.log("my num is " + this.number);
}
}

mynum = new num(1);
mynum.print();// my num is 1

当创建很多mynum时,每一个的print()函数都是独立的,如果想共用,可以将print()移到外面

1
2
3
4
5
6
7
8
9
10
function num (number){
this.number = number
}

num.prototype.print = function(){
console.log("my num is " + this.number);
};

mynum = new num(1);
mynum.print();// my num is 1

不过还是用经典的class舒服一些

1
2
3
4
5
6
7
8
9
10
11
12
13
class num {

constructor (number){
this.number = number;
}

print(){
console.log("my num is " + this.number);
}

}
mynum = new num(1);
mynum.print();// my num is 1

参考

作者

Xingo

发布于

2019-03-27

更新于

2019-12-26

许可协议