【问题标题】:What is happening when I set i equal to a string in a for loop? [duplicate]当我设置 i 等于 for 循环中的字符串时会发生什么? [复制]
【发布时间】:2021-09-26 11:04:57
【问题描述】:

假设我有一个 for 循环

for (let i = 6; i <= 10; i++) {
    console.log(i);
};
/* 
logs the expected... 
6 
7
8
9
10
returns undefined
*/

但如果我将这些数字转换为字符串...

for (let i = "6"; i <= "10"; i++) {
    console.log(i);
};
// logs nothing, returns undefined

究竟发生了什么让这个循环看起来短路了?

【问题讨论】:

  • 作为字符串,"10" 小于 "6"

标签: javascript for-loop


【解决方案1】:

在第二种情况下,您是comparing string values,这就是为什么循环的条件是false

'6' &lt;= '10' is false

【讨论】:

    【解决方案2】:

    这都是关于它所持有的字符串的值,“10”小于“6”,这就是它返回未定义的原因。

    【讨论】:

      【解决方案3】:

      真正的解释是您的 for 循环正在评估“6”和“10”的词法值。字符串的词法顺序如下: 1、10、2、3、4、5、6、7、8、9

      与任何其他字符串一样,它按字符串 characters 排序,因此您可以认为它的排序方式与用字母排序字符串的方式相同。

      因此,循环条件立即评估为 false,因此它永远不会执行记录值的块。

      【讨论】:

        【解决方案4】:

        &lt;= 正在计算左侧是否小于或等于右侧。

        6 <= 10
        

        是真的,因为 6 是小于 10 的数字。

        'aaaaaaaaaaaa' <= 'z'
        

        是真的,因为作为一个字符串,aaaaaaaaaaaaa 小于 z。

        '6' < '10'
        

        为假,因为 6 按字母顺序大于 10。因此,当它们是字符串时,它们按字母顺序进行比较,这就是您遇到不同输出的原因。

        【讨论】:

          猜你喜欢
          • 2017-02-17
          • 1970-01-01
          • 2020-05-10
          • 2011-01-19
          • 1970-01-01
          • 2016-05-16
          • 1970-01-01
          • 2017-05-17
          相关资源
          最近更新 更多