JS随笔记

208 阅读2分钟

摘抄 juejin.cn/post/684490… N个知识点。

null 和 undefined 区别

undefined是【基本数据类型】 表示未定义 缺少的意思。

null是【引用数据类型】,是对象,表示空对象

undefined是从null派生出来的 所以undefined==null 为 true

== 和 === 区别

== 两边值类型不同的时候,要先进行类型转换,再比较。

=== 不做类型转换,类型不同的一定不等。

==先转换类型再比较,===先判断类型,如果不是同一类型直接为false!!

Cookie 与 Local storage 与 Session storage 区别

特性 Cookie localStorage sessionStorage
数据的生命期 一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效 除非被清除,否则永久保存 仅在当前会话下有效,关闭页面或浏览器后被清除
存放数据大小 4K左右 一般为 5MB
与服务器端通信 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题 仅在客户端(即浏览器)中保存,不参与和服务器的通信
易用性 需要程序员自己封装,原生的Cookie接口不友好 需要程序员自己封装,源生的Cookie接口不友好 源生接口可以接受,亦可再次封装来对Object和Array有更好的支持

箭头函数中的 this

1.箭头函数中没有 arguments 箭头函数中如果使用 arguments 属性,拿到的是箭头函数外层函数的 arguments 属性。

function constant() {
    return () => arguments[0]
}

let result = constant(1);
console.log(result()); // 1

let nums = (...nums) => nums;
//如果我们就是要访问箭头函数的参数呢?你可以通过这样 ES6 中 命名参数 或者 rest 参数的形式访问参数

2.箭头函数没有构造函数,因为没有构造函数,所以也不能使用 new 来调用,如果我们直接使用 new 调用箭头函数,会报错。箭头函数中没有super。所以this、arguments、new.target这些值由外围最近一层非箭头函数决定。

let fun = ()=>{}
let funNew = new fun(); 
// 报错内容 TypeError: fun is not a constructor

3.箭头函数没有原型,原型的prototype 是函数的一个属性,但是对于箭头函数没有它。

let fun = ()=>{}
console.log(fun.prototype); // undefined

4.箭头函数中没有自己的this,箭头函数中的 this 不能用 call()、apply()、bind() 这些方法改变 this 的指向,箭头函数中的 this 直接指向的是调用函数的 上一层运行时

var a = 'A'

var obj = {
    a: 'B',
    foo: () => {
        console.log(this.a)
    }
}

obj.foo() // "A"