解释 JavaScript 中数字的行为

Explain behaviour of Numbers in Javascript

本文关键字:数字 JavaScript 解释      更新时间:2023-09-26
JavaScript

中的数字函数可以用来乘法,除法,求余数,但不能用于减法和加法?

//I used theNumber = 3
var theNumber = Number ( prompt (" Pick a number " , "") ) ;
alert ("  difference  " + theNumber - theNumber ) ;
// Difference is NaN, why not 0?
var theNumber = Number ( prompt (" Pick a number " , "") ) ;
alert ("  sum  " + theNumber + theNumber ) ;
// ->33
为什么

会发生串联?为什么不是 6?请帮忙!

正在发生连接,因为它以字符串开头:

alert ( "  sum  " + theNumber + theNumber ) ;
-> "string" + Number + Number = "StringNumberNumber"

从这一点开始,字符串后面的+被视为串联运算符,而不是数字加法运算符。如果要避免这种情况,可以将添加项括在括号中:

alert ( "  sum  " + (theNumber + theNumber) ) ;
-> "String" + (Number + Number) = "StringEvaluatedParenthesis"

胁迫

在javascript中,如果变量是使用冲突的类型进行操作的,那么解释器会隐式更改(强制(变量类型和操作。

运算符优先级和关联性

操作根据链接进行

根据这个来源,(...(具有从左到右的关联性,这意味着它从左到右执行操作。

所以(5 + 4 + 6(;将分解为:

  1. 5 + 4//返回 9
  2. 9 + 6//返回 15;

您的问题需要您了解上述两个主题。现在

var theNumber = Number ( prompt (" Pick a number " , "") ) ;
alert ("  difference  " + theNumber - theNumber ) ;

差异 NaN 为什么不是 0?

因此,应用您的新JS功能并考虑(...(的工作原理。

假设数字 = 3;

    "差值">
  1. +数字="差值3"(将数字强制为字符串(
  2. " 差值 3" - 数字 = NaN;

字符串 + 字符串在 JS 中以串联的形式有效,但"-"运算符不适用于字符串,因此强制再次发生,将"差 3"转换为返回 NaN 的数字。

console.log(NaN - 5);

有趣的事实:console.log(NaN - NaN(;//也是 NaN!


var theNumber = Number ( prompt (" Pick a number " , "") ) ;
alert ("  sum  " + theNumber + theNumber ) ;// ->3// ->33

这一次:

  1. "和" + 数字 = " 总和 3">
  2. "总和 3" + 数字 = "总和 33">

因为 Javascript 不是严格类型语言,并且在它以字符串开头时需要执行强制转换,所以数字 3 它被强制转换为字符串,输出是它们的串联。如果添加括号(数字 - 数字(,它将把这两个处理为数字,但随后会将结果转换为字符串以产生输出。

一些例子:

var stringValue = "1000";

这会将字符串转换为数字

var numericValue = +stringValue; 

这将使它再次串起来

var stringAgain = "" + numericValue ;

我会先使用一元加号运算符将它们转换为数字。

+num1 + +num2;

这主要是由于运算符优先级

-+具有相同的优先级,它们执行从右到左的顺序,所以如果你保留任何一个* or /它工作正常,因为它们具有高优先级

java script算术运算符是基于operands执行的,这就是执行串联的原因。

因此,如果您将算术运算括在括号旁边()它们会变得高优先级并首先执行,然后执行 nex ......

所以,试试这样

alert("diference " + (theNumber-theNumber))

点击这里获取更多信息