在JavaScript中测试变量是否未定义的最合适方法是什么?我见过几种可能的方法:
if (window.myVariable)
Run Code Online (Sandbox Code Playgroud)
要么
if (typeof(myVariable) != "undefined")
Run Code Online (Sandbox Code Playgroud)
要么
if (myVariable) //This throws an error if undefined. Should this be in Try/Catch?
Run Code Online (Sandbox Code Playgroud) 我们经常在JavaScript代码中使用以下代码模式
if (typeof(some_variable) != 'undefined' && some_variable != null)
{
// Do something with some_variable
}
Run Code Online (Sandbox Code Playgroud)
是否有一种不那么冗长的检查方式具有相同的效果?
根据一些论坛和文献说,以下应该具有相同的效果.
if (some_variable)
{
// Do something with some_variable
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当未定义时,Firebug将这样的语句评估为运行时错误some_variable,而第一个语句就好了.这只是Firebug的一个(不需要的)行为,还是这两种方式之间确实存在一些差异?
如何查找变量是否未定义?
我目前有:
var page_name = $("#pageToEdit :selected").text();
var table_name = $("#pageToEdit :selected").val();
var optionResult = $("#pageToEditOptions :selected").val();
var string = "?z=z";
if ( page_name != 'undefined' ) { string += "&page_name=" + page_name; }
if ( table_name != 'undefined' ) { string += "&table_name=" + table_name; }
if ( optionResult != 'undefined' ) { string += "&optionResult=" + optionResult; }
Run Code Online (Sandbox Code Playgroud) 我们如何为未定义的变量添加检查,例如:
function A(val) {
if (val == undefined)
// do this
else
// do this
}
Run Code Online (Sandbox Code Playgroud) 我有一个我需要从node.js脚本的脚本,我想保持javascript引擎独立.
所以,例如,我想做:
__PRE__
只有它在node.js下运行 我该怎么办这个测试?
编辑:发布此问题时,我不知道node.js模块功能是基于commonjs.
对于具体的例子,我提出了一个更准确的问题:
脚本如何判断它是否需要作为commonjs模块?
扩展如何发现它是第一次运行或刚刚更新,以便扩展可以执行某些特定操作?(例如,打开帮助页面或更新设置)
每次有人提到测试时undefined,都会指出它undefined不是一个关键字,因此可以设置为"hello",所以你应该使用 typeof x == "undefined".这对我来说似乎很荒谬.没有人会这样做,如果他们这样做,那将是足够的理由永远不会使用他们写的任何代码......对吗?
我发现一例人谁无意中设定的undefined到null,这给出一个理由,以避免假设undefined不会被覆盖.但是,如果他们这样做了,那么这个bug就不会被发现,我也看不出它有多好.
在C++中,每个人都清楚地知道这是合法的#define true false,但没有人建议你避免true使用它0 == 0.你只是假设没有人会成为一个足够强大的混蛋,如果他们这样做,再也不会相信他们的代码了.
这有没有真正咬过别人分配给undefined(有意)的人而且它破坏了你的代码,或者这更像是一个假想的威胁?我愿意冒昧地让我的代码更具可读性.这是一个非常糟糕的主意吗?
重申一下,我并不是要求如何防止重新分配未定义.我已经看过那些已经写过100次的技巧了.我问不使用这些技巧是多么危险.
可能重复:
在JavaScript中检测未定义的对象属性
从下面的javascript示例中
try {
if(jsVar) {
proceed();
}
}catch(e){
alert(e);
}
Run Code Online (Sandbox Code Playgroud)
这个jsVar在另一个js罚款中声明并初始化.
问题是,当代码在执行其他文件(声明和启动的文件)之前执行时,代码会抛出未定义的错误.这就是为什么它被try和catch包围着.
什么是处理这个未定义错误的最佳方法,而不是尝试catch?
我是一名经验丰富的C++/Java程序员,第一次使用Javascript.我正在使用Chrome作为浏览器.
我用字段和方法创建了几个Javascript类.当我读取一个不存在的对象字段时(由于我的错字),Javascript运行时不会抛出错误或异常.显然这样的读取字段是"未定义的".例如:
var foo = new Foo();
foo.bar = 1;
var baz = foo.Bar; // baz is now undefined
Run Code Online (Sandbox Code Playgroud)
我知道我可以检查" 在JavaScript中检测未定义的对象属性 "中提到的"未定义"的相等性,但这似乎很乏味,因为我经常在我的代码中读取对象字段.
当我读取未定义的属性时,有没有办法强制抛出错误或异常?
当我读取未定义的变量(而不是未定义的对象属性)时,为什么会抛出异常?