《你不知道的JavaScript下卷》知识点笔记

1.

[1, 2, 3] == [1, 2, 3] 返回false

[1, 2, 3] == “1, 2, 3” 返回true

 

2.

如果 < 比较的两个值都是字符串, 就像在b < c中那样,那么比较按照字典顺序(即字典中的字母表顺序)进行。如果其中 一边或两边都不是字符串,就像在a < b中那样,那么这两个值的类型都转换为数字,然 后进行普通的数字比较。 

 

3.

var a = 42, b = “foo”;

 a < b, a > b, a==b  全部返回false,因为foo被转为了NaN 

 

4.

document.getElementById()看起来像是一个正常的js函数,但它其实是浏览器的DOM提供的指向内置方法的一个很薄的暴露接口

 

5.

alert是由浏览器提供给js程序的,而不是由js引擎本身提供

 

6.

js引擎在执行前(有时是执行中)就编译了代码

 

7.

function foo(…args) {

console.log(args);

}

 

foo(1,2,3,4,5);   //[1,2,3,4,5]

 

8.

undefined意味着缺失,也就是说,undefined和缺失是无法区别的

 

9.

函数默认值可以不只是像31这样的简单值,他们可以是任意合法表达式,甚至是函数调用

eg: function foo(x = y + 4, z = bar(x)) {

console.log(x,z);

}

 

10.

var {x:ban} = bar()  //是给ban变量附上bar中返回对象的x属性值

 

11.

解构是一个通用的赋值操作,不只是申明,变量可能是已经申明的,这样的话解构就只用于赋值

 

12.

特别对于对象解构形式来说,如果省略了var/let/const声明符,就必须把整个赋值表达式用()括起来,因为如果不这样做,语句左侧的{..}作为语句中的第一个元素就会被当作是一个块语句而不是一个对象。

 

13.

对象解构形式允许多次列出同一个源属性(持有值任意类型)

 var {a: X, a:Y} = {a: 1};

X; // 1

Y; // 1

 

14.

解构也可以使用默认值

 

15.

es6中你需要定义一个与某个词法标识符同名的属性的话,可以把x: x简写为x

 

16.

es6对对象字面定义新增了一个语法,用来支持指定一个要计算的表达式,其结果作为属性名。

 

var o = {

[prefix + “foo”]: function(){}

}

 

17.

计算属性名最常见的用法可能就是和symbols共同使用

 

18.

要为已经存在的对象设定prototype,可以使用es6工具Object.setPrototypeOf(o2, o1);

 

18.

super只允许在简洁方法中出现,而不允许在普通函数表达式属性中出现,也只允许以super.XXX的形式(用于属性/方法访问)出现,而不能以super()的形式出现

 

19.

o2.foo() 方法中的 super 引用静态锁定到 o2,具体说是锁定到 o2 [[Prototype]]。基本 上这里的 super 就是 Object.getPrototypeOf(o2)——当然会决议到 o1——这是它如何找到 并调用 o1.foo() 的过程。 

 

20.

更合理的做法是只在确实需要简短的在线函数表达式的时候才采用=>,而对于那些一般长度的函数则无需改变。

 

21.

在箭头函数内部,this不是动态的,而是词法的。他是从包围的作用域中词法继承而来的this

 

22.

大小端的意思是多字节数字中的低字节位于这个数字字节表示中的右侧还是左侧

 

23.

可以通过clear()清除整个map的内容,要得到map的长度(也就是键的个数),可以使用size属性(而不是length)

 

24.

要从map中删除一个元素,不要使用delete运算符,而是要使用delete()方法。

 

25.

获得一个map的所有键 var keys = […m.keys()];

获得一个map的所有值 var vals = […m.values()];

确定一个map中是否有给定的键,可以使用has方法

 

26.

map的本质是允许你把某些额外的信息(值)关联到一个对象(键)上,而无需把这个信息放入对象本身

 

27.

如果使用对象作为映射的键,这个对象后来被丢弃(所有的引用解除),试 图让垃圾回收(GC)回收其内存,那么 map 本身仍会保持其项目。你需要 map 中移除这个项目来支持 GC

 

28.

WeakMap只接受对象作为键,这些对象是被弱持有的,也就是说如果对象本身被垃圾回收的话,在WeakMap中的这个项目也会被移除。

 

29.

WeakMap没有size属性或clear()方法,也不会暴露任何键、值或项目上的迭代器。

 

30.

set是一个值的集合,其中的值唯一(重复会被忽略)

 

31.

set的API和map类似。只是add()方法代替了set()方法,没有get()方法。

 

32.

set不需要get()是因为不会从集合中取一个值,而是使用has()测试一个值是否在。

 

33.

set的唯一性不允许强制转换,所以1和”1”被认为是不同的值

 

34.

如果你有一个回调函数需要传入的参数封装为数组,Array.of()可以完美解决这个需求

 

35.

远古时期类数组转数组的方法:

var arr = Array.prototype.slice.call(arrLike);

高科技方法:

var arr = Array.from(arrLike);

 

36.

fill()方法用指定值完全(或部分)填充已存在的数组,可选地接受参数start和end,它们指定了数组要填充的在子集位置。

 

37.

var points = [

{x: 10, y: 20},

{x: 20, y: 30},

{x: 30, y: 40},

{x: 40, y: 50}

]

 

points.findIndex(function matcher(point){

return (

point.x % 3 == 0 &&

point.y % 4 == 0

);

});      // 2,若没有匹配则返回-1

 

38.

Object.assign(target, srource…)可实现对象合并

 

39.

es6中判断NaN可以使用Number.isNaN()方法。

 

40.

JavaScript的数字值永远都是浮点数,所以确定数字是否为“整型”的概念并不是检查其类型,因为JavaScript并没有这样区分。

es6新增了一个辅助工具Number.isInteger()

 

41.

“foo”.repeat(3);   // “foofoofoo”

 

42.

var abc = function(){}

abc.name;    // “abc”

 

var abc = function haha(){}

abc.name;     //“haha”

 

猜你喜欢

转载自www.cnblogs.com/yonglin/p/9079098.html