因此,在Javascript中,有两种声明单个变量的方法:
var myVariable;
然后myVariable = 1234;
在代码中稍后赋值var myVariable = 1234;
对于第一种方法,如果声明该变量,则其值是undefined
,直到将其分配给一个值。因此,如果尚未分配,则基本上一文不值。为什么有人会做第一种类型的声明?
在相关说明中,为什么Javascript(我猜想做到这一点的任何语言)(C,C ++等)都具有声明和赋值(相对于类似python的赋值myVariable=1234
),因为即使声明了变量,该变量也是没用,直到分配了?
您在这里缺少几件事。:
1)所有变量声明都由JS交互器提升到函数的顶部,因此,无论如何,直到变量被分配之前,所有变量都是不确定的,即使是稍后在函数中同一语句中声明和分配的变量也是如此。这称为“可变提升”,是Java语言的功能。因此,在函数顶部定义的变量与在函数后面定义的变量之间没有功能上的区别。影响函数可能行为的唯一因素是为变量分配了一个值。
因此,由于存在变量“提升”,因此具有两个内联变量声明的此类函数:
function(array) {
for (var i = 0; i < array.length; i++) {
var el = array[i];
if (el > 3) {
array[i] = el * el;
}
}
}
js解释器实际上是这样处理的(所有变量声明都悬挂在函数的开头):
function(array) {
var i, el;
for (i = 0; i < array.length; i++) {
el = array[i];
if (el > 3) {
array[i] = el * el;
}
}
}
2)undefined
具有值的变量。该值是undefined
并且可能有用。例如,它是错误的,因此可以在if
语句或任何布尔测试中对其进行测试,甚至可以对其进行显式测试以查看是否为undefined
。这是一个例子:
function processIfNegative(array) {
var foundNegative;
array.foreach(function(el) {
if (el < 0) {
foundNegative = true;
}
});
if (foundNegative) {
// do some processing
}
}
现在,出于可读性考虑,我可能会对false
自己进行初始化foundNegative ,但这不是必需的,因为undefined
已经是falsey
。
或者,在下面的示例中,您明确检查该undefined
值。
function processLowestPositive(array) {
var lowestValue;
array.foreach(function(el) {
if (el >= 0) {
if (lowestValue === undefined) {
lowestValue = el;
} else if (el < lowestValue) {
lowestValue = el;
}
}
});
// if there was a positive value found
if (lowestValue !== undefined) {
// process the lowest positive value
}
}
注意:在undefined
显式测试值时,我总是使用===
或,!==
因此没有类型转换,并且我确定该值实际上是undefined
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句