Cos*_*con 84 javascript undefined
每次有人提到测试时undefined,都会指出它undefined不是一个关键字,因此可以设置为"hello",所以你应该使用 typeof x == "undefined".这对我来说似乎很荒谬.没有人会这样做,如果他们这样做,那将是足够的理由永远不会使用他们写的任何代码......对吗?
我发现一例人谁无意中设定的undefined到null,这给出一个理由,以避免假设undefined不会被覆盖.但是,如果他们这样做了,那么这个bug就不会被发现,我也看不出它有多好.
在C++中,每个人都清楚地知道这是合法的#define true false,但没有人建议你避免true使用它0 == 0.你只是假设没有人会成为一个足够强大的混蛋,如果他们这样做,再也不会相信他们的代码了.
这有没有真正咬过别人分配给undefined(有意)的人而且它破坏了你的代码,或者这更像是一个假想的威胁?我愿意冒昧地让我的代码更具可读性.这是一个非常糟糕的主意吗?
重申一下,我并不是要求如何防止重新分配未定义.我已经看过那些已经写过100次的技巧了.我问不使用这些技巧是多么危险.
Ry-*_*Ry- 55
不,我从来没有.这主要是因为我在现代浏览器上开发,这些浏览器大多数符合ECMAScript 5.ES5标准规定undefined现在只读.如果您使用严格模式(应该),如果您不小心尝试修改它,将会引发错误.
undefined = 5;
alert(undefined); // still undefined
Run Code Online (Sandbox Code Playgroud)
'use strict';
undefined = 5; // throws TypeError
Run Code Online (Sandbox Code Playgroud)
你应该不会做的是建立自己的作用域,可变undefined:
(function (undefined) {
// don't do this, because now `undefined` can be changed
undefined = 5;
})();
Run Code Online (Sandbox Code Playgroud)
常数很好.仍然没必要,但很好.
(function () {
const undefined = void 0;
})();
Run Code Online (Sandbox Code Playgroud)
Thi*_*ter 40
没有合适的代码会做这样的事情.但你永远不会知道一些想要聪明的开发人员或者你正在使用的插件/库/脚本.另一方面,它是极不可能的,现代浏览器根本不允许覆盖undefined,所以如果你使用这样的浏览器进行开发,你会很快注意到任何代码是否试图覆盖它.
即使你没有要求它 - 很多人在寻找更常见的"如何防止重新定义undefined"问题时可能会发现这个问题,所以无论如何我都会回答这个问题:
无论浏览器的年龄多大,都有一种非常好的方法可以获得真正的未定义 undefined:
(function(undefined) {
// your code where undefined is undefined
})();
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为始终是未指定的参数undefined.您也可以使用接受一些真实参数的函数来完成它,例如当您使用jQuery时.以这种方式确保理智的环境通常是个好主意:
(function($, window, undefined) {
// your code where undefined is undefined
})(jQuery, this);
Run Code Online (Sandbox Code Playgroud)
然后你可以确定在匿名函数里面有以下几点:
$ === jQuerywindow === [the global object]undefined === [undefined].但是,请注意,有时typeof x === 'undefined'实际需要:如果变量x从未被设定为一个值(与被设置到undefined),阅读x以不同的方式,如if(x === undefined)将抛出一个错误.这不适用于对象属性,所以如果你知道它y总是一个对象,那么它if(y.x === undefined)是绝对安全的.
Luc*_*ero 19
有一个简单的解决方案:比较void 0始终未定义.
请注意,您应该避免,==因为它可能强制值.使用===(和!==)代替.
也就是说,如果有人写,=而不是==在比较某些东西时,可能会错误地设置未定义的变量undefined.
| 归档时间: |
|
| 查看次数: |
9095 次 |
| 最近记录: |