《你不知道的JavaScript》:值类型坑2

版权声明:本文为微信公众号前端小二版权所有,如需转载可私信或关注文末微信公众号留言。 https://blog.csdn.net/qq_34832846/article/details/86554385

js中只有一种数值类型,即number,包括"整数"和带小数的十进制数。js中其实是没有真正意义上的整数的,这个整数就是没有小数的十进制数。js使用的双精度格式。

数字值可以调用 Number.prototype中的方法,比如toFixed()方法可以用来指定小数部分显示的位数:

var a = 68.9527;
console.log(a.toFixed(0));      // 69
console.log(a.toFixed(1));      // 69.0
console.log(a.toFixed(2));      // 68.95
console.log(a.toFixed(3));      // 68.953
console.log(a.toFixed(4));      // 68.9527
console.log(a.toFixed(5));      // 68.95270

请注意,上例中的输出结果实际上是给定数字的字符串形式,如果指定的小数部分的显示位数多于实际位数就用0补齐。

js中的数字的呈现方式决定了整数的安全范围远小于Number.MAX_VALUE。在ES6中定义了最大整数Number.MAX_SAFE_INTEGER和最小整数Number.MIN_SAFE_INTEGER,分别对应值9007199254740991-9007199254740991

当js需要处理一些比较大的数字时,比如数据库中的64位ID等,由于js的数字类型无法精确呈现64位数值,所以必须将它们保存(转换)为字符串。

一般这种情况比较少,如果是简单的比较操作,可以通过转换为字符串来实现,如果确实需要对大数值进行数学运算,则需要借助相关工具库。

检测一个数是否为整数,可以使用ES6中的Number.isInteger(),ES5之前可以使用自定义方法:

//ES6
console.log(Number.isInteger(59));      // true
console.log(Number.isInteger(59.0));    // true
console.log(Number.isInteger(59.2));    // false

//ES5
if(!Number.isInteger){
    var isInteger = function(num){
        return typeof num === "number" && num % 1 === 0;
    }
}
console.log(isInteger(10));     // true
console.log(isInteger(11.0));   // true
console.log(isInteger(11.5));   // false

下面来看下值的引用:

  • js中的变量不可能成为指向另一个变量的引用。
  • 在js中引用指向的始终是值。
  • js对值和引用的赋值在语法上没有区别,完全根据值的类型来决定。基本类型值总是通过值复制的方式来赋值/传递,包括``nullundefined`、字符串、数字、布尔和ES6中的symbol。引用类型值则总是通过引用复制的方式来赋值/传递的,包括数组、封装对象等。
var a = 2;
var b = a;  // b是a的值的一个副本,
b++;
console.log(a);     // 2
console.log(b);     // 3

var c = [1, 2, 3];
var d = c;      // d是[1, 2, 3]的一个引用,c也是[1, 2, 3]的另一个引用,这两个引用互不相关
d.push(4);
console.log(c);     // [1, 2, 3, 4]
console.log(d);     // [1, 2, 3, 4]

另外还有两个特殊类型的值,null和undefined。null类型只有一个值null,undefined类型也只有一个值undefined。所有变量在赋值之前默认都是undefined。void运算符返回undefined。

喜欢本文请扫下方二维码,关注微信公众号: 前端小二,查看更多我写的文章哦,多谢支持。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34832846/article/details/86554385