现代JavaScript教程(02)

  1. 在现代引擎中,从性能的角度来看,我们是从对象还是从原型链获取属性都是没区别的。它们(引擎)会记住在哪里找到的该属性,并在下一次请求中重用它。
    例如,对于 pockets.glasses 来说,它们(引擎)会记得在哪里找到的 glasses(在 head 中),这样下次就会直接在这个位置进行搜索。并且引擎足够聪明,一旦有内容更改,它们就会自动更新内部缓存,因此,该优化是安全的

  2. __ proto __ 的值可以是对象,也可以是 null。而其他的类型都会被忽略。

  3. Object.getPrototypeOf/Object.setPrototypeOf 来取代 proto 去 get/set 原型

  4. 写入不使用原型,原型仅用于读取属性。对于写入/删除操作可以直接在对象上进行。

  5. 无论在哪里找到方法:在一个对象还是在原型中。在一个方法调用中,this 始终是点符号 . 前面的对象。

  6. for…in 、Object.keys 、 obj.hasOwnProperty(key) 的区别
    a. for … in 迭代自身和原型链中可枚举的属性和方法
    b. Object.keys 仅显示 自己的key
    c.obj.hasOwnProperty(key) – 返回一个布尔值

  7. 此外,我们还明确了 proto 是 [[Prototype]] 的 getter/setter,就像其他方法一样,它位于 Object.prototype。
    我们可以通过 Object.create(null) 来创建没有原型的对象。这样的对象被用作 “pure dictionaries”,对于它们而言,使用 “__ proto __” 作为键是没有问题的。

  8. Rest 参数会收集剩余的所有参数,因此下面这种用法没有意义,并且会导致错误:

function f(arg1, ...rest, arg2) { // arg2 在 ...rest 后面?!
  // error
}

9.尽管 arguments 是一个类数组,也是可迭代对象,但它终究不是数组。它不支持数组方法,因此我们不能调用 arguments.map(…) 等方法。

10.Spread语法
rest用法,是收集多余的参数成为数组,但是spread语法是把传入的可迭代类型的参数,拆成单个。

let arr = [3,5,1]
alert(Math.max(...arr)); //等于 alert(Math.max(arr[0],arr[1],arr[2]);

复制对象的浅拷贝现象:

let a=[1,2,{name:"a"}]
let b=[...a]
b[2].name="b"
consle.log(a)//1,2,{name:"b"}

11.类型归纳:
1).内置的arguments是可迭代对象,但是不是数组
2). …rest 多余参数是数组类型
3). 单独使用 …arr 会报错,但是如果用[]包起来,可以形成一个数组 (spread)

let arr=[1,2,3]
let bb = ...arr //报错!!
let bb = [...arr] //可以看成 let bb = new Array(...arr)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值