Javascript 将字符串与数字进行核对是一种好的方式吗?

Javascript 将字符串与数字进行核对是一种好的方式吗?,javascript,Javascript,在风格方面,以下哪一个to-JS代码段更好 var answer = Number(prompt('What is the value of 2 + 2?')); if (answer === 4) { // do something } vs 我认为第一个更好,因为它更显式(并且不会发生类型强制)。它们都是错误的,因为您应该为此使用parseInt(XX,10)。记住,每次你使用==时,耶稣都会杀死一只小狗。因此,始终使用==,因此:始终检查正确的类型。更好 var n = pro

在风格方面,以下哪一个to-JS代码段更好

var answer = Number(prompt('What is the value of 2 + 2?'));

if (answer === 4) {
    // do something
}
vs


我认为第一个更好,因为它更显式(并且不会发生类型强制)。

它们都是错误的,因为您应该为此使用
parseInt(XX,10)
。记住,每次你使用
==
时,耶稣都会杀死一只小狗。因此,始终使用
==
,因此:始终检查正确的类型。

更好

var n = prompt("What is the value of 2 + 2?"); n = parseInt(n, 10); //and check var n=提示(“2+2的值是多少?”); n=parseInt(n,10); //检查
当然是第一个,因为正如您所提到的,没有发生类型强制

 var answer = parseInt((prompt('What is the value of 2 + 2?'), 10)) ;

这取决于你想用
回答
做什么。如果您只想进行比较,则无需转换类型:

var answer = prompt('What is the value of 2 + 2?');

if (answer === "4") {
    // do something
}
如果您希望最后得到一个数字进行比较,然后进行进一步处理,
number
或一元加号运算符
+
将输出字符串转换为数值,或者
NaN
如果它不是有效的基数10

var answer = +prompt('What is the value of 2 + 2?');

if (answer === 4) {
    // do something
}
parseInt(x,10)
Number(x)
之间存在差异-前者将忽略末尾的非数字字符

parseInt("4Hello World"); // 4
Number("4Hello World"); //NaN
+"4Hello World"; //NaN

(查看当前项目的来源)这是一场小狗大屠杀!数字可以很好地工作-parseInt将允许不一定正确的答案
parseInt(“4a”,10)
将返回
4
,因此代码会认为
“4a”
是正确的答案。为什么它比数字好?它们并不都是错的,都是对的-只是不一定适合所有情况。我更喜欢一元+运算符,但是
Number()
通常是比
parseInt()
更好的选择-除非您想忽略尾随的非数字字符或您不处理基数10。人们一直建议
parseInt(n,10)
<代码>+n
是等效的且更短。深奥,但在JavaScript专业人士中很容易理解,你很快就会习惯。@Chris So,+n是否使用parseInt函数进行转换?不,实际上;在我看来,它所做的对这个案子来说更好。虽然
parseInt('2,也许',10)
parseInt('2.345',10)
都将返回
2
+'2,也许'
将返回
NaN
+'2.345'
将返回
2.345
(因此,是一个数字,但不是整数)。
+
一元运算符基本上调用
Number
,而
parseInt
获取第一个块(删除空格,标点符号拆分)并尝试将其作为整数(基数由基数参数指定,或猜测8、10或16-
Number
将猜测10或16).对于triple equals,在提示符处输入的任何字符串都不会等于数字4,因此您最好说
if(false)
。当然,对于这个特定的例子,整个要点是让“4”等于4,因此需要双等于,除非像第二个例子那样进行其他类型的转换?@nnnnnn在第一个例子中,我将字符串与字符串进行比较。关键是你并不总是需要做转换。如果您需要进行转换,因为您有一个数值变量要与
答案
进行比较,这就是第二个代码片段的目的。+1我很抱歉,我承认我在这里完全错了。在发布我之前的每一条评论之前,我再次阅读了你的答案,但不知何故,我仍然将其与数字4而不是字符串“4”进行比较。我猜如果我在午夜后发帖睡觉,就会发生这种情况。。。
parseInt("4Hello World"); // 4
Number("4Hello World"); //NaN
+"4Hello World"; //NaN