当前位置:嗨网首页>书籍在线阅读

02-严格模式

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.1 严格模式

JavaScript严格模式在ECMAScript 5就出现了,它直接影响到ES6功能的使用。所以研究ES6的功能之前,我们先来看看严格模式。

当下面这行代码被加入到Node程序的代码顶部时,严格模式就会打开:

"use strict";

用单引号或者双引号都可以。

要对程序的所有依赖模块都强制使用严格模式,还有别的方法,比如使用 --strict_ mode 参数,但我不建议这么做。强制一个模块使用严格模式,可能会产生错误,以及无法预料的后果。所以一般只在自己的程序和模块中使用它,因为这些代码是你可以控制的。

严格模式会对你的代码有显著的影响,其中包括,使用一个变量之前如果不进行定义就会引发错误、一个函数的参数只能被声明一次、你无法在 eval 中使用和 eval 平级的变量等。特别需要大家注意的是,在严格模式中不能使用二进制值。

在前面的内容中,当设定一个文件的权限时,你无法将权限设置为一个八进制值:

"use strict";
var fs = require('fs');
fs.open('./new.txt','a+',0666, function(err, fd) {
     if (err) return console.error(err);
     fs.write(fd, 'First line', 'utf-8', function(err,written, str) {
        if (err) return console.error(err);
        var buf = new Buffer(written);
        fs.read(fd, buf, 0, written, 0, function (err, bytes, buffer) {
           if (err) return console.error(err);
           console.log(buf.toString('utf8'));
        });
     });
});

在严格模式中,这段代码会产生一个语法错误:

fs.open('./new.txt','a+',0666, function(err, fd) {
                         ^^^^
SyntaxError: Octal literals are not allowed in strict mode.

你可以将二进制值转为一个更安全的格式,只需要将前面的 0 替换为 0o ,即一个数字 0 加一个小写字母 o 。设置文件权限时将 0666 改为 0o666 ,严格模式的程序才会正常运行。

fs.open('./new.txt','a+',0o666, function(err, fd) {

fs.open() 方法也接受字符串类型的八进制值:

fs.open('./new.txt','a+','0666', function(err, fd) {

但是这个语法实在是不优雅,所以我还是建议使用前面的格式。

在使用一些ES6扩展时,严格模式也是必须的。如果你想使用ES6的类(本章稍后会讲到),那么你必须使用严格模式。同样的,如果你要使用let(后面也会讲到)你也必须使用严格模式。

**讨论一下八进制值** 如果你对八进制值的使用规定有兴趣的话,我建议你看看ES的讨论区:“八进制值是有用的(讨厌UNIX的人请绕行)”。