Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么JS不';t强制a中i的值;对于“in-loop”;?_Javascript_Coercion - Fatal编程技术网

Javascript 为什么JS不';t强制a中i的值;对于“in-loop”;?

Javascript 为什么JS不';t强制a中i的值;对于“in-loop”;?,javascript,coercion,Javascript,Coercion,给定两个函数(预期输出为//d): 我发现I的值是使用for…in循环强制为字符串的。据我所知,if语句失败,因为i的值不再是数字,因此无法求和。 我的问题是,为什么JS不强制i返回if语句(str.charCodeAt(0)+i)?并允许以与循环相同的方式求和? 这是因为,一旦i在函数中被强制,那么它就不能再被强制了吗 您是否尝试过: str.charCodeAt(parseInt(i,10))基本上就是这样。如表+中所示,一个字符串+一个数字,数字将始终隐式强制为字符串 直觉是,String

给定两个函数(预期输出为
//d
):

我发现
I
的值是使用
for…in
循环强制为字符串的。据我所知,if语句失败,因为
i
的值不再是数字,因此无法求和。 我的问题是,为什么JS不强制
i
返回if语句
(str.charCodeAt(0)+i)
?并允许以与循环相同的方式求和? 这是因为,一旦
i
在函数中被强制,那么它就不能再被强制了吗

您是否尝试过:

str.charCodeAt(parseInt(i,10))
基本上就是这样。如表
+
中所示,一个
字符串
+一个
数字
数字
将始终隐式强制为
字符串


直觉是,
String
Number
都有
+
操作符,但是
Number
总是可以强制为
字符串
,而不是所有的
String
都是(可以强制为)a
Number

在第一个函数中,您将
i
的类型初始化为数字时设置为
Number
。在第二个函数中,
i
是一个iterable的键,因此它意味着它的类型是
string
。根本没有类型转换。

没有。这并不意味着它们不存在。但是在这个特定的例子中,这是我试图理解的一个奇怪的行为。这是预期的行为,
+
操作符将在任何变量或文本是字符串的情况下执行串联。“I
的值被强制为字符串”-不完全是。
i
值是属性名,它从一开始就是一个字符串。没有发生强迫。“为什么JS不强制我返回一个数字”-因为
+
是字符串连接。和
==
是一个类型敏感的比较。重点不是调试代码。我在这里的目的是理解引擎盖下是什么…我读了一些东西,但没有提到强迫。这就是为什么我决定问…@TiagoRuivo哦,对不起,误会了。我想其他人已经为你回答了:)好的,我明白了。因为我有一个带有
str.charCodeAt(0)
的数字,
I
是一个字符串,
+
操作符将执行concat。因此,
str.charCodeAt(0)+i
的结果是=到“970”。这会使代码出错。
function fearNotLetter(str) {

  for (let i = 0; i < str.length; i++) {
    let code = str.charCodeAt(i)
    if (code !== str.charCodeAt(0) + i) {
      return String.fromCharCode(str.charCodeAt(0) + i)
    }
  }
  return undefined
}

fearNotLetter("abce");

// d
function fearNotLetter(str) {

  for (let i in str) {
    let code = str.charCodeAt(i)
    if (code !== str.charCodeAt(0) + i) {
      return String.fromCharCode(str.charCodeAt(0) + i)
    }
  }
  return undefined

}

fearNotLetter("abce");

// ϊ