JS变量声明的类型

kk

因此,在Javascript中,有两种声明单个变量的方法:

  1. 声明,var myVariable;然后myVariable = 1234;在代码中稍后赋值
  2. 一行声明和赋值 var myVariable = 1234;

对于第一种方法,如果声明该变量,则其值是undefined,直到将其分配给一个值。因此,如果尚未分配,则基本上一文不值。为什么有人会做第一种类型的声明?

在相关说明中,为什么Javascript(我猜想做到这一点的任何语言)(C,C ++等)都具有声明和赋值(相对于类似python的赋值myVariable=1234),因为即使声明了变量,该变量也是没用,直到分配了?

jfriend00

您在这里缺少几件事。

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据变量声明类型

来自分类Dev

奇怪的变量类型声明

来自分类Dev

声明未知类型的变量

来自分类Dev

JS:变量声明后的分号

来自分类Dev

在postgres中声明表类型的变量

来自分类Dev

如何在Lua中用类型声明变量

来自分类Dev

for循环变量声明中允许的类型?

来自分类Dev

在函数中使用声明中的类型变量

来自分类Dev

“类型”-声明vba中的常量变量

来自分类Dev

JavaScript中变量声明的不同类型

来自分类Dev

在C ++中声明抽象类型的变量

来自分类Dev

for循环变量声明中允许的类型?

来自分类Dev

如何声明类型的数组变量:Double / Cell

来自分类Dev

for循环内的引用类型变量声明

来自分类Dev

存储过程-变量声明和类型错误

来自分类Dev

JavaDoc-未声明的类型变量

来自分类Dev

声明由指针指示的类型的变量

来自分类Dev

Jmeter类型化变量声明:方法调用

来自分类Dev

实例声明中类型变量的顺序

来自分类Dev

const 变量声明是类型定义吗

来自分类Dev

Postgres:如何声明用户类型变量?

来自分类Dev

如何声明扩展参数化类型的类型变量?

来自分类Dev

快速引用超类型的子类型声明变量

来自分类Dev

VB.Net变量声明:类型还是不类型?

来自分类Dev

使用类型注释来缩小已声明的Python变量的类型

来自分类Dev

快速引用超类型的子类型声明变量

来自分类Dev

如何声明扩展参数化类型的类型变量?

来自分类Dev

吊装声明为不带'var'的JS变量

来自分类Dev

为什么将变量声明为通配符类型