【JavaScript基础笔记】数值、运算符

数值

JS底层都是以64位浮点数储存,这意味着JS底层没有整数。某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数。

由于浮点数是不精确的,所以在JS涉及小数运算和比较时要特别注意!

{0.1 0.2 === 0.3 // false} {0.3 0.1 // 2.9999999999999996} {(0.3 0.2=== (0.2 0.1// false}

唯一有区别的场合是,+0-0当作分母,返回的值是不相等的。因为除以正零得到+Infinity,除以负零得到-Infinity

NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。

parseInt方法用于将字符串转为整数。对于那些会自动转为科学计数法的数字,parseInt会将科学计数法的表示方法视为字符串,因此导致一些奇怪的结果。

parseInt(1000000000000000000000.5) // 1 // 等同于 parseInt('1e+21') // 1 parseInt(0.0000008) // 8 // 等同于 parseInt('8e-7') // 8

parseInt方法还可以接受第二个参数(2到36之间),表示被解析的值的进制,返回该值对应的十进制数。默认情况下,parseInt的第二个参数为10,即默认是十进制转十进制。

 

parseFloat方法用于将一个字符串转为浮点数。如果字符串包含不能转为浮点数的字符,则不再进行往后转换,返回已经转好的部分。

如果参数不是字符串,或者字符串的第一个字符不能转化为浮点数,则返回NaN

注意,parseFloat会将空字符串转为NaN。这些特点使得parseFloat的转换结果不同于Number函数。

 

isFinite方法返回一个布尔值,表示某个值是否为正常的数值。

除了Infinity-InfinityNaNundefined这几个值会返回falseisFinite对于其他的数值都会返回true

 

运算符

加法运算符是在运行时决定,到底是执行相加,还是执行连接。也就是说,运算子的不同,导致了不同的语法行为,这种现象称为“重载”(overload)。由于加法运算符存在重载,可能执行两种运算,使用的时候必须很小心。

 

余数运算结果的正负号由第一个运算子的正负号决定,为了使运算结果绝对为正,我们可以使用绝对值函数 Math.abs()

 

自增和自减运算符有一个需要注意的地方,就是放在变量之后,会先返回变量操作前的值,再进行自增/自减操作;放在变量之前,会先进行自增/自减操作,再返回变量操作后的值。

var 1;x++ // 1; var 1++// 2  (x是先返回当前值,然后自增,所以得到1y是先自增,然后返回新的值,所以得到2。)

 

‘=’、‘==’、‘===’、'!='、'!==' 符号分别表示:赋值符;相等运算符,严格相等运算符,不相等运算符,严格不相等运算符。

相等运算符会将两个值转换成相同类型再进行严格比较,而严格相等运算符遇到类型不同的两个值会直接返回false。

相等运算符隐藏的类型转换,会带来一些违反直觉的结果,容易使我们出错(例如2!=true;2!=false;false=='0';null==undefined),不同类型的值比较最好只使用严格相等运算符。

严格相等运算符在遇到两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个地址!

 任何值(包括NaN本身)与NaN比较,返回的都是false

NaN与任何值都不相等(包括自身)。另外,正0等于负0

 

(&&) 如果第一个运算子的布尔值为true,则返回第二个运算子的值(注意是值,不是布尔值);如果第一个运算子的布尔值为false,则直接返回第一个运算子的值,且不再对第二个运算子求值。

(||)它的运算规则是:如果第一个运算子的布尔值为true,则返回第一个运算子的值,且不再对第二个运算子求值;如果第一个运算子的布尔值为false,则返回第二个运算子的值。

 

三元条件表达式与if...else语句具有同样表达效果,前者可以表达的,后者也能表达。但是两者具有一个重大差别,if...else是语句,没有返回值;三元条件表达式是表达式,具有返回值。所以,在需要返回值的场合,只能使用三元条件表达式,而不能使用if..else

 

位运算符直接处理每一个比特位(bit),所以是非常底层的运算,好处是速度极快,缺点是很不直观,许多场合不能使用它们,否则会使代码难以理解和查错。

有一点需要特别注意,位运算符只对整数起作用,如果一个运算子不是整数,会自动转为整数后再执行。另外,虽然在 JavaScript 内部,数值都是以64位浮点数的形式储存,但是做位运算的时候,是以32位带符号的整数进行运算的,并且返回值也是一个32位带符号的整数。

 

void运算符的作用是执行一个表达式,然后不返回任何值,或者说返回undefined

 

逗号运算符用于对两个表达式求值,并返回后一个表达式的值。

 

圆括号不是运算符,而是一种语法结构。它一共有两种用法:一种是把表达式放在圆括号之中,提升运算的优先级;另一种是跟在函数的后面,作用是调用函数。

 

少数运算符的计算顺序是从右到左,即从右边开始计算,这叫做运算符的“右结合”(right-to-left associativity)。其中,最主要的是赋值运算符(=)和三元条件运算符(?:)。

 

上述部分笔记引用自——阮一峰《JavaScript 标准参考教程(alpha)》

posted on 2018-12-12 20:11  65Seeker  阅读(198)  评论(0编辑  收藏  举报