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
都是(可以强制为)aNumber
在第一个函数中,您将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");
// ϊ