miscellaneous(杂项)

no escaped reserved words as identifiers

这条规则的意思是标识符中不允许出现转义字符。

// Uncaught SyntaxError:   
// Keyword must not contain escaped characters  
eval('var v\\u0061r=1;'); 

在控制台敲入如上例子会报错,但报的错误提示是说关键字不能包括转义字符。

// 不报错  
eval('var \\u0061b=1;');
// 输出ab的值为1
console.log(ab); 

在试过以上例子以后,发现标识符中其实是可以包括转义字符的。

duplicate property names in strict mode

'use strict';
var obj = {name: 1, name: 2};
// Object {name: 2}
console.log(obj);

var obj2 = {name: 111, name: 222};
// Object {name: 222}
console.log(obj2);

并看不出什么区别。= =

no semicolon needed after do-while

do-while语句后不需要分号。

no assignments allowed in for-in head

for-in循环的头部不允许出现赋值。

// 输出 0,1,2
var arr = [3, 4, 5];
for(var i = 1 in arr) { 
    console.log(i); 
}

// 输出 name,pro
var obj = {
    name: 1,
    pro: 2
};
for(var i = 1 in obj) {
    console.log(i);
}   

从运行结果来看,即使在循环的头部进行赋值,也不会造成什么影响。

accessors aren't constructors

getter函数不是构造函数。

// Uncaught TypeError:   
// Object.getOwnPropertyDescriptor(...).get is not a constructor
var i = new (Object.getOwnPropertyDescriptor({get a(){}}, 'a')).get;

built-in prototypes are not instances

内置类型的prototype不是实例。