ES6 数值的扩展

本节我们学习 ES6 中的常用数据类型之数值(Number)类型。ES6 中除了 JavaScript 中的六种数据类型之外,还引入了一种新的原始数据类型 Symbol,它是 JavaScript 语言的第七种数据类型:

  • Number (数值)
  • String(字符串)
  • Boolean(布尔值)
  • Object(对象)
  • undefined
  • null
  • Symbol

二进制和八进制表示法

ES6 中提供了二进制和八进制数值的新的写法:

  • 二进制的新写法可以使用前缀 0b 或者 0B 表示。
let a = 0b1001;
console.log(a);  // 输出:9
  • 八进制的新写法可以使用前缀 0o 或者0O表示。
let b = 0o345;
console.log(b);  // 输出:229

ES5 开始,在严格模式之中,八进制就不再允许使用前缀 0 表示,ES6 进一步明确,要使用前缀0o表示。

// 非严格模式
(function(){
console.log(0o11 === 011);
})() // true
  
// 严格模式
(function(){
    'use strict';
    console.log(0o11 === 011);
})() 

执行代码后,报错信息如下所示:

SyntaxError: Octal literals are not allowed in strict mode.

如果要将 0b0o前缀的字符串数值转为十进制,要使用 Number 方法。

示例:
console.log(Number('0b110'));  // 输出:6
console.log(Number('0o43'));   // 输出:35

Number对象的常用方法

ES6Number 对象上提供了一些方法,我们一起来看一下。

isFinite()方法

isFinite() 方法可以用于检查一个数值是否为有限的。如果是则返回 true,不是则返回 false

示例:
console.log(Number.isFinite(1));      // true 
console.log(Number.isFinite(1000.0)); // true 
console.log(Number.isFinite('xkd'));  // false
console.log(Number.isFinite(NaN));    // false
console.log(Number.isFinite(true));   // false

上述代码中可以看到,只有当 isFinite 方法中的参数为有限数值时,才会返回 true,参数的值为字符串或者布尔类型等都会返回 false

isNaN()方法

isNaN() 方法用来检查一个值是否是 NaN,为 NaN 则返回 true,否则返回 false

示例:

可以看到,下面代码中只有第一个 isNaN() 方法的返回结果为 true

console.log(Number.isNaN(NaN));    // true
console.log(Number.isNaN(null));   // false 
console.log(Number.isNaN('xkd'));  // false
console.log(Number.isNaN(true));   // false

parseInt()方法

parseInt() 方法用于将值转换为整型。如果参数不为数值类型,则会返回 NaN

示例:
console.log(Number.parseInt(1.215));  // 1
console.log(Number.parseInt(null));   // NaN 
console.log(Number.parseInt(8.0));    // 8
console.log(Number.parseInt('xkd'));  // NaN

parseFloat()方法

parseFloat() 方法用于将值转换为浮点型。

示例:
console.log(Number.parseFloat(2.15));  // 2.15
console.log(Number.parseFloat(7));     // 7 
console.log(Number.parseFloat(16));    // 16
console.log(Number.parseFloat(null));       // NaN
console.log(Number.parseFloat(undefined));  // NaN
console.log(Number.parseFloat('xkd'));      // NaN

isInteger()方法

isInteger() 方法用来判断一个值是否为整数。需要注意的是,在 JavaScript 内部,整数和浮点数是同样的储存方法,例如 11.0 被视为同一个值。

示例:

从下面代码中可以看出,只有当参数为整数结果才会返回 true,当参数不为整数或者数值类型的值时,也会返回 false

console.log(Number.isInteger(2.15));  // false
console.log(Number.isInteger(7));     // true
console.log(Number.isInteger(16));    // true
console.log(Number.isInteger('xkd')); // false
console.log(Number.isInteger(null));  // false
console.log(Number.isInteger(true));  // false

Math对象的方法

ES6 在 Math 对象上新增了一些与数值相关的方法,这些方法全部都是静态方法,只能在 Math 对象上调用。

trunc()方法

trunc() 方法用于去除一个数的小数,只保留整数部分,也可以理解为取整。

示例:
console.log(Math.trunc(1.85));  // 1
console.log(Math.trunc(-7.15)); // -7
console.log(Math.trunc(25));    // 25
console.log(Math.trunc('xkd')); // NaN
console.log(Math.trunc(true));  // 1
console.log(Math.trunc(false)); // 0

需要注意的是,当方法中参数的类型为字符串时,会返回一个 NaN,当参数为 true 时返回 1,为 false 则返回 0

sign()方法

sign() 方法用来判断一个数是正数、负数、或者 0。当参数为负数时返回 -1,为 0 时返回 0,为正数时返回 1

示例:
console.log(Math.sign(-7));    // -1
console.log(Math.sign(0));     // 0
console.log(Math.sign(34));    // 1
console.log(Math.sign('xkd')); // NaN
console.log(Math.sign(true));  // 1
console.log(Math.sign(false)); // 0

cbrt()方法

cbrt() 方法用于计算一个数的立方根。

示例:
console.log(Math.cbrt(8));      // 2
console.log(Math.cbrt(27));     // 3
console.log(Math.cbrt(9));      // 2.080083823051904
console.log(Math.cbrt(0));      // 0
console.log(Math.cbrt(true));   // 1
console.log(Math.cbrt(false));  // 0
console.log(Math.cbrt('xkd'));  // NaN

clz32()方法

clz32() 方法将参数转为 32 位无符号整数的形式,然后返回这个 32 位值里面有多少个前导 0

示例:
console.log(Math.clz32(1));     // 31
console.log(Math.clz32(0));     // 32
console.log(Math.clz32(14));    // 28
console.log(Math.clz32(188));   // 24
console.log(Math.clz32(true));  // 31
console.log(Math.clz32(NaN));   // 32

imul()方法

imul() 方法返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数。

示例:
console.log(Math.imul(2, 5));   // 10
console.log(Math.imul(-1, 4));  // -4
console.log(Math.imul(-2, -9)); // 18
console.log(Math.imul(NaN));    // 0
console.log(Math.imul(true));   // 0

fround()方法

fround() 方法返回一个数的单精度浮点数形式。

示例:
console.log(Math.fround(1.125));   // 1.125
console.log(Math.fround(1000));    // 1000
console.log(Math.fround(-1));      // -1
console.log(Math.fround(1.0254));  // 1.0254000425338745

hypot()方法

hypot() 方法返回所有参数的平方和的平方根。

示例:
console.log(Math.hypot(-1));    // 1
console.log(Math.hypot(3, 5));  // 5.8309518948453
console.log(Math.hypot(NaN));   // NaN
console.log(Math.hypot('xkd')); // NaN
console.log(Math.hypot(true));  // 1
console.log(Math.hypot());      // 0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270