2016年10月3日星期一

Google Blog 10/04/2016 (a.m.)

  • tags: JavaScript 你所不知道的JS

    • 如果无法在对象本身找到需要的属性,就会继续访问对象的[[Prototype]]
    • 它会创建一个对象并把这个对象的[[Prototype]]关联到指定的对象
      • 此时的myObject.__proto__ === anotherObjectmyObject.__proto__.__proto__.__proto__ = null
    • 使用for..in遍历对象时原理和查找[[Prototype]]链类似,任何可以通过原型链访问到(并且是enumerable,参见第3章)的属性都会被枚举。
      • for...in 任何可以通过原型链查找到的,并且是enumerable的都会被枚举出来
    • 使用in操作符来检查属性在对象中是否存在时,同样会查找对象的整条原型链(无论属性是否可枚举
      • 无论属性是否可以被枚举,只要找到了,就返回true
    • 包含JavaScript中许多通用的功能。
      • Object.prototype是原型链的尽头,它的上一级是null
      • 赋值语句中,会先寻找属性的位置,如果不直接存在在对象上,那么就去找原型链,如果找到,就赋值;如果没有在原型链上找到,就在对象上直接赋值如果原型链上有并且对象上也有这个属性,对象上的属性会屏蔽掉原型链上的属性
    • 如果foo不直接存在于myObject中而是存在于原型链上层时myObject.foo = "bar"会出现的三种情况
      • 对象属性与原型链上的属性同名情况:1. 如果原型链上的属性没有标记为只读,那么就屏蔽2. 如果原型链上的属性标记为只读,那么就不能创建同名的对象属性【严格模式下报错,非严格模式忽略赋值】3. 如果原型链上的这个属性有[[setter]],那么就调用这个[[setter]],这个属性不会被添加对象属性上
    • 第二种情况可能是最令人意外的,只读属性会阻止[[Prototype]]链下层隐式创建(屏蔽)同名属性。这样做主要是为了模拟类属性的继承
    • 更奇怪的是,这个限制只存在于=赋值中,使用Object.defineProperty(..)并不会受到影响。
      • = =?fuck...
    • myObject.a++; // 隐式屏蔽!
    • 但是别忘了++操作相当于myObject.a = myObject.a + 1
      • 太可怕了,都不好发现
    • JavaScript中只有对象。
      • JavaScript是基于原型的可以这么说,JavaScript才是真正被称为面向对象的语言,因为它可以不通过类来创建对象,直接操作对象像Java更像是面向类的语言
  • tags: JavaScript

    • 如何评价 ECMAScript 2016(ES7)只新增2个特性? - 张秋怡的回答 - 知乎
    • ECMAScript 标准的制定原则是成文标准要从事实标准中诞生实现先于标准存在
      • 成文标准从事实标准中诞生现在ES每年一更,太振奋人心了,JavaScript大有希望
    • 主流常青浏览器里 JavaScript 引擎总共也才 4 个:FireFox 的 SpiderMonkey,IE/Edge 的 Chakra,Chrome/Opera 的 V8,Safari 的 JavaScriptCore
      • 原来Firefox的引擎就叫油猴子
  • tags: JavaScript

      • null和undefined转换成Boolean都是false不同的是 Number(null) ==> 0Number(undefined) ==> NANnull == undefined ==>true (因为两边都被转换成了false)null === undefined ==> false(因为严格等于不进行类型转换,所以这两个是不相等的)
      • typeof null ==> “object”typeof undefined ==> "undefined"
    • 变量被声明了,但没有赋值时,就等于undefined。
    • 调用函数时,应该提供的参数没有提供,该参数等于undefined
    • 函数没有返回值时,默认返回undefined。
      • 所以在控制台上调用函数经常返回了个undefined

Posted from Diigo. The rest of my favorite links are here.

没有评论:

发表评论