前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《你不知道的JavaScript》:值类型坑2

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

作者头像
前端_AWhile
发布2019-08-29 13:11:18
4980
发布2019-08-29 13:11:18
举报
文章被收录于专栏:前端一会

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

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

代码语言:javascript
复制
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之前可以使用自定义方法:

代码语言:javascript
复制
//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。引用类型值则总是通过引用复制的方式来赋值/传递的,包括数组、封装对象等。
代码语言:javascript
复制
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。

-------------------------------- 热门文章 --------------------------------

设计模式>>>

javascript设计模式一: 单例模式

javascript设计模式二:策略模式

javascript设计模式三:代理模式

javascript设计模式四:迭代器模式

javascript设计模式五:原型模式

javascript设计模式六:发布-订阅模式(观察者模式)

javascript设计模式七:模板方法模式

javascript设计模式八:职责链模式

javascript设计模式九:中介者模式

javascript设计模式十:装饰者模式

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小二 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档