哪种检查变量是否已初始化的方法更好/正确?(假设变量可以保存任何内容(字符串、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) {
当前回答
检查window.hasOwnProperty(“varname”)
一种替代过多类型答案的方法;
用var varname=value声明的全局变量;全局范围内的语句
可以作为窗口对象的财产访问。
因此,hasOwnProperty()方法
返回一个布尔值,指示对象是否将指定的属性作为自己的属性(而不是继承它)可用于确定
“varname”的var已全局声明,即是窗口的属性。
//因此,在全球范围内建立了窗口的财产var foo=“whatever”,//stringbar=false,//bool巴兹;//未定义//window.qux不存在console.log([window.hasOwnProperty(“foo”),//truewindow.hasOwnProperty(“bar”),//truewindow.hasOwnProperty(“baz”),//truewindow.hasOwnProperty(“qux”)//false] );
hasOwnProperty()的优点在于,在调用它时,我们没有使用一个尚未声明的变量,这当然是问题的一半。
虽然不总是完美或理想的解决方案,但在某些情况下,这只是工作!
笔记
当使用var定义变量时,上述情况是正确的,而不是let which:
声明一个块作用域局部变量,可选地将其初始化为一个值。与var关键字不同,var关键字全局定义变量,或局部定义整个函数,而不考虑块范围。在程序和函数的顶层,let与var不同,它不会在全局对象上创建属性。
为了完整性:根据定义,常量实际上不是可变的(尽管它们的内容可以是可变的);更相关的是:
与var变量不同,全局常量不会成为窗口对象的财产。常量的初始值设定项是必需的;也就是说,必须在声明它的同一语句中指定它的值。常量的值不能通过重新分配来更改,也不能重新声明。const声明创建对值的只读引用。这并不意味着它所持有的值是不可变的,只是变量标识符不能被重新分配。
由于let变量或常量永远不是继承了hasOwnProperty()方法的任何对象的财产,因此不能使用它来检查它们是否存在。
关于hasOwnProperty()的可用性和使用:
object派生的每个对象都继承hasOwnProperty()方法。[…]与in运算符不同,此方法不检查对象的原型链。
其他回答
您需要运算符的类型。明确地:
if (typeof variable !== 'undefined') {
// the variable is defined
}
typeof运算符将检查变量是否真的未定义。
if (typeof variable === 'undefined') {
// variable is undefined
}
与其他运算符不同,typeof运算符在与未声明的变量一起使用时不会引发ReferenceError异常。
但是,请注意,typeof null将返回“object”。我们必须小心避免将变量初始化为null的错误。为了安全起见,我们可以使用以下方法:
if (typeof variable === 'undefined' || variable === null) {
// variable is undefined or null
}
有关使用严格比较==而不是简单相等==的更多信息,请参阅:JavaScript比较中应该使用哪个相等运算符(==vs==)?
这些答案(除了Fred Gandt解决方案)要么不正确,要么不完整。
假设我需要我的variableName;携带一个未定义的值,因此它是以var variableName等方式声明的;这意味着它已经初始化;-如何检查是否已申报?
或者更好——我如何立即检查“Book1.chapter22.paragraph37”是否存在一次调用,但不会引起引用错误?
我们通过使用最强大的JasvaScript运算符in运算符来实现
"[variable||property]" in [context||root]
>> true||false
为了检查变量是否已被声明/设置,我使用了这个肮脏的技巧。
即使使用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");
}
您可以使用typeof运算符。
例如
var dataSet;
alert("Variable dataSet is : " + typeof dataSet);
上面的代码段将返回如下输出
变量dataSet为:undefined。