ngS*_*.py 1 javascript typescript
请考虑以下情况:
案例 1:使用文字和变量初始化变量,我之前从未声明或初始化过这些变量。
var x = 10, i;
Run Code Online (Sandbox Code Playgroud)
当我打印 的值时x,它会打印10。我想知道,这在语法上是如何正确的?这是出乎意料的事情。这是一个错误吗?
案例 2:使用我之前声明或初始化过的变量和文字初始化变量。
var i = 10;
var x = i, 10;
Run Code Online (Sandbox Code Playgroud)
然后,我尝试了上面的方法,认为如果CASE 1可以工作,那么上面的方法也应该有效。但是,我很惊讶,它没有用。相反,它给出了一个错误:Uncaught SyntaxError: Unexpected number。
CASE 3:初始化一个变量,有两个文字。
var x = 10, 10;
Run Code Online (Sandbox Code Playgroud)
我在上面尝试过,但它给我带来了同样的错误:Uncaught SyntaxError: Unexpected number. 现在我很困惑。
CASE 4:初始化一个变量,有两个变量,我之前已经声明或初始化过。
var i = 10;
var j = 20
var x = i, j;
Run Code Online (Sandbox Code Playgroud)
上述案例给了我预期的结果,即10.
但是,在上述所有情况之后,为什么即使首先,JavaScript 在语法上也允许这样做呢?也有一个我以前从未声明过的变量?我很困惑。有什么问题吗,比如一个错误?或者对此有什么解释吗?
笔记:
你的困惑源于一个误解:
案例 1:用一个常量和一个变量初始化一个变量,我以前从未声明或初始化过。
Run Code Online (Sandbox Code Playgroud)var x = 10, i;
那不是该代码的作用。在var声明中,逗号不是逗号运算符,¹ 它是您声明的变量之间的分隔符。您的代码完全等同于:
var x = 10;
var i;
Run Code Online (Sandbox Code Playgroud)
案例二...
案例三...
Case 2 和 Case 3 给你一个错误,因为10它不是一个有效的变量名,但这就是var语句在逗号后面所期望的。
案例 4:初始化一个变量,有两个变量,我之前已经声明或初始化过。
Run Code Online (Sandbox Code Playgroud)var i = 10; var j = 20 var x = i, j;上述案例给了我预期的结果,即 10。
......但不是因为你想的原因。有效的原因是您可以var根据需要多次重新声明变量。上面的代码完全等同于:
var i = 10;
var j = 20
var x = i;
var j;
Run Code Online (Sandbox Code Playgroud)
的重新声明j没有效果,它只是完全被忽略了。(对于较新的letor 则不是这样,const如果您尝试重新声明变量,它们会给您一个声明错误。)
如果 var x = i, j使用逗号运算符,则预期结果将是xhad 20, not 10(有关详细信息,请参见下文)。
¹ “...不是逗号运算符...”在表达式中,,是 JavaScript 中的运算符,但除非您将事物组合在一起,否则()这不是,变量声明(或数组或对象文字,函数参数列表)中的含义,或函数参数列表)。但只是为了完整性:
var a;
a = 1, 3;
Run Code Online (Sandbox Code Playgroud)
...使用逗号运算符,它是 JavaScript 的奇数运算符之一:它评估其左侧操作数,丢弃结果值,然后评估其右侧操作数并将该结果值作为其结果。所以上面的,a是用值初始化的3。逗号运算符表达式中的左侧操作数仅对副作用有用。(通常,使用逗号运算符往往会导致代码不清晰,因此最好避免使用。)
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |