If it is too strong, then you are too weak.就算是背景吧随着ES2015的到来,JavaScript引进了许多新特性,很多很强大的特性完全可以弥补JS本身语法上的弱点,比如让很多初次尝试JS的程序员感到不习惯的变量提升问题、没有块级作用域问题等问题。strong modeES5增加了strict mode,现在V8又实现了一种新的模式——strong mode。strong mode是strict mode的升级版,在语法要求上更严格了,同时正因为这些严格的要求,让开发者得以规避语言本身一些糟粕或者让人困惑的地方。开启strong mode跟开启strict一样,js文件第一行或者function第一行加上'use strong';,使用–strong_mode标志位,需要Chrome Cancry或者iojs v2.0以及上。!!!注意了:如果iojs使用–use_strong标志位,将开启全局strong,不管代码里有没有’use strong;’,一律当作strong mode运行,因此很有可能伤及nodejs本身的模块和第三方不支持strong mode的模块,同样的–use_strict也是全局开启strict模式,都请慎用。strong mode有哪些改变下面将涉及到一些ES2015的新特性,这里不做详细讲解,感兴趣的读者可以关注后续ES2015系列相关文章。Deprecate sloppy equality废弃了==和!=两个比较操作符,强制使用===和!==。避免了一些意想不到的结果,大家都懂的。'use strong';
if (1 == 1);node –strong_mode example.jsif (1 == 1);
^^
SyntaxError: Please don't use '==' or '!=' in strong mode, use '===' or '!==' insteadDeprecate ‘var’废弃了var关键字,变量声明使用const或者let。const和let不存在变量提升的问题,也可以创造块级作用域。'use strong';
var name = 'alloyteam';node –strong_mode example.jsvar name = 'alloyteam';
^^^
SyntaxError: Please don't use 'var' in strong mode, use 'let' or 'const' insteadDeprecate ‘delete’废弃了delete操作符,需要delete的地方可以使用set或者map的delete,可能数据结构需要改变。'use strong';
const obj = {
name: 'alloyteam'
};
delete obj.name;node –strong_mode example.jsdelete obj.name;
^^^^
SyntaxError: Please don't use 'delete' in strong mode, use maps or sets instead可以这样解决'use strong';
const obj = new Map([
['name', 'alloyteam']
]);
obj.delete('name');Deprecate empty sub-statements像if (expression);这样的空子语句的写法会报错了。'use strong';
if (1 === 1);node –strong_mode example.jsif (1 === 1);
^
SyntaxError: Please don't use empty sub-statements in strong mode, make them explicit with '{}' insteadDeprecate for-in废弃了for-in遍历,可以使用for-of替代。for-in对对象属性进行遍历,for-of对可迭代的对象进行遍历。for-in存在诸多问题,如果非要遍历对象,可以使用Object.keys(obj)拿到对象的属性列表,然后进行数组遍历。'use strong';
const obj = {
name: 'alloyteam'
};
for (let k in obj) {
console.log(k, obj[k]);
}node –strong_mode example.jsfor (let k in obj) {
^^
SyntaxError: Please don't use 'for'-'in' loops in strong mode, use 'for'-'of' instead可以这样解决'use strong';
const obj = new Map([
['name', 'alloyteam']
]);
for (let item of obj) {
console.log(item[0], item[1]);
}Deprecate ‘arguments’函数体内不能再使用arguments变量,可以使用…args替代。'use strong';
function test() {
console.log(arguments);
}node –strong_mode example.jsconsole.log(arguments);
^^^^^^^^^
SyntaxError: Please don't use 'arguments' in strong mode, use '...args' instead可以这样解决node –strong_mode –harmony-rest-parameters example.js'use strong';
function test(...args) {
console.log(args);
}