比较JavaScript中未定义的值
Comparing undefined value in JavaScript
我有一个对象,它的值有时可能未定义。那么,是否有可能/有效/良好的做法来测试它,如下面的if case:
if(params === undefined)
{
alert("sound." + params);
}
如果没有,为什么我们不能这样做?
到目前为止,它工作正常。但是,我想知道它是否会随时出错?
谢谢
因为理论上undefined
可以被重新定义(至少在js 1.8.5之前),所以最好使用
if (typeof params === 'undefined')
如果params
不是已知的变量名,也不会抛出错误。
使用typeof varName
更安全:-
如果params不是在代码中任何地方声明的变量,则不会抛出任何错误。
if(typeof params === "undefined")
{
//it is not defined
}
if(params === undefined) //<-- This will fail of you have not declared the variable
//param. with error "Uncaught ReferenceError: params is not defined "
{
}
引用未定义的
类型的答案很好,这里有一点额外的。对我来说,在这种情况下,你需要解释你在用参数做什么。如果你正在做,说:
function foo(paramObject) {
// determine if a suitable value for paramObject has been passed
}
那么你可能应该测试paramObject是否是一个对象,而不是它是否有undefined以外的值。所以你可以这样写:
if (typeof paramObject == 'object') {
// paramObject is an object
}
但是你仍然不太了解这个对象,它可以是任何东西(包括null)。一般来说,你需要记录传入的对象,然后输入:
if (paramObject) {
// do stuff, assuming if the value is not falsey, paramObject is OK
}
现在如果抛出错误,那是调用者没有提供合适的对象的错误。
推论是,所有变量都应该声明,这样测试就不会抛出错误(并且您不需要使用typeof,这是那些承诺很多但没有交付很多的半有用的操作符之一)。
相关文章:
- 行末尾未定义Javascript
- 未定义Javascript文档
- 未定义Javascript函数
- define未定义Javascript节点
- 未定义Javascript对象Class错误
- 全局变量从事件侦听器中变得未定义 - javascript
- 未定义 JavaScript 数组
- Firefox 中的“未定义”JavaScript 错误
- 使用 kineticjs 的未定义 JavaScript 变量
- 为什么我的类在运行时未定义.Javascript 模块模式
- 事件未定义 JavaScript Firefox (JSON)
- 未定义 Javascript 函数
- 未捕获的引用错误 函数未定义 Javascript
- 使用单击处理程序时出现“系统未定义”JavaScript 错误
- 未定义 JavaScript 原型方法
- 如果你不返回任何内容,为什么函数会返回未定义?Javascript
- 未定义Javascript Integer对象
- 未定义Javascript对象
- 与异步和同步函数相关的未定义javascript函数的问题
- 未定义Javascript类构造函数