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)
然后你可以确定在匿名函数里面有以下几点:
$ === jQuery
window === [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 次 |
最近记录: |