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

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。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值