2011-12-01 57 views
0

这些JS片段中的哪一个在风格方面更好?检查字符串是否符合数字的好风格?

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

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

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

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

我想说的第一个是更好,因为它更明确的(没有强制类型转换会发生)。

+0

人们一直在建议'parseInt(n,10)'。 '+ n'相当于更短。深奥的,但在JavaScript专业人员中很好理解,你很快就会习惯它。 –

+0

@Chris所以,+ n是否使用parseInt函数来进行转换? – helpermethod

+0

不,实际上;在我看来,它所做的是更好地处理这种情况。虽然'parseInt('2,也许',10)'或'parseInt('2.345',10)'会返回2,'+'2,也许''会返回'NaN'和'+'2.345' '会返回'2.345'(所以,一个数字,但不是一个整数)。 '+'一元运算符基本上调用'Number',而'parseInt'接受第一个块(删除空格,拆分标点符号)并尝试将其作为一个整数(基数由radix参数指定,或者它猜测8,10或16 - '号码'会猜测10或16)。 –

回答

2

这取决于你想要什么与answer。如果你想要做的唯一事情就是比较一下,你不需要转换的类型:

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

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

如果你想与一些比较,然后进一步加工,Number或一元加落得运算符+会将输出字符串转换为数值,如果它不是有效的基数10,则将其转换为NaN

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 
+0

第一个代码片段需要双等于工作... – nnnnnn

+0

@nnnnnn'prompt'返回一个字符串,所以triple-equals作品。 – Dennis

+0

使用triple-equals在提示符处输入的任何字符串都将等于数字4,因此您不妨说'if(false)'。对于这个特定的例子来说,整个问题的关键是让“4”等于4,因此除非在第二个例子中进行了其他类型转换,否则需要double-equals? – nnnnnn

4

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

+0

(*查看当前项目的来源*)这是一场小狗大屠杀! – bezmax

+0

数字将正常工作 - parseInt将允许不一定正确的答案'parseInt(“4a”,10)'将返回'4',因此代码会认为'“4a”'是一个正确的答案。 – Dennis

+1

为什么它比数字更好? – helpermethod

0
更好

 
var n = prompt("What is the value of 2 + 2?"); 
n = parseInt(n, 10); 
//and check 
1

当然好了第一个,因为正如你所提到的,没有强制类型转换happens.but你应该使用parseInt函数:

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