哪种检查变量是否已初始化的方法更好/正确?(假设变量可以保存任何内容(字符串、int、对象、函数等))
if (elem) { // or !elem
or
if (typeof elem !== 'undefined') {
or
if (elem != null) {
哪种检查变量是否已初始化的方法更好/正确?(假设变量可以保存任何内容(字符串、int、对象、函数等))
if (elem) { // or !elem
or
if (typeof elem !== 'undefined') {
or
if (elem != null) {
当前回答
最稳健的“是定义的”检查是使用类型
if (typeof elem === 'undefined')
如果您只是检查一个定义的变量来分配一个默认值您可以经常这样做:
elem = elem || defaultElem;
它通常很好用,请参见:在javascript中设置默认值的惯用方法
还有一行使用typeof关键字:
elem = (typeof elem === 'undefined') ? defaultElem : elem;
其他回答
为了检查变量是否已被声明/设置,我使用了这个肮脏的技巧。
即使使用eval,我也没有找到将代码提取到函数的方法。点击下面的评论,了解原因。
"use strict";
// var someVar;
var declared;
try {
someVar;
declared = true;
} catch(e) {
declared = false;
}
if (declared) {
console.log("someVar is declared; now has the value: " + someVar);
} else {
console.log("someVar is not declared");
}
您需要运算符的类型。明确地:
if (typeof variable !== 'undefined') {
// the variable is defined
}
这取决于情况。如果您正在检查代码之外可能或可能尚未全局定义的内容(例如jQuery),您需要:
if (typeof(jQuery) != "undefined")
(这里不需要严格相等,typeof总是返回字符串。)但是,如果函数的参数可能已传递,也可能未传递,则它们将始终被定义,但如果忽略,则为null。
function sayHello(name) {
if (name) return "Hello, " + name;
else return "Hello unknown person";
}
sayHello(); // => "Hello unknown person"
当您执行简单的作业和相关检查时,还有另一种简便的方法来检查这一点。只需使用条件(三元)运算符。
var values = typeof variable !== 'undefined' ? variable : '';
当您尝试使用引用变量的实例赋值来声明全局变量时,这也会很有用。
若你们想检查变量不应该是未定义的或空的。然后执行以下检查。
当声明变量时,如果您想检查值,这甚至很简单:它将同时执行未定义和空检查。
var values = variable ? variable : '';
最稳健的“是定义的”检查是使用类型
if (typeof elem === 'undefined')
如果您只是检查一个定义的变量来分配一个默认值您可以经常这样做:
elem = elem || defaultElem;
它通常很好用,请参见:在javascript中设置默认值的惯用方法
还有一行使用typeof关键字:
elem = (typeof elem === 'undefined') ? defaultElem : elem;