es6笔记之十三-数字变化、Math新增、ES2018(ES9)新增

数字(数值)变化:
二进制: (Binary)
let a = 0b010101;
八进制: (Octal)
let a = 0o666; 0 开始,最大数字到7
十六进制: #ccc 颜色

Number()、parseInt()、 parseFloat()//mark一记,复习下
[# Number()、parseInt()、parseFloat()的区别

现在的改变是很多数字方法都加了Number.xxx(),规范化了
Number.isNaN(NaN) -> true/false

let a =12;
console.log(isNaN(NaN));//以前写法,现在也可用
console.log(Number.isNaN(a));//false

Number.isFinite(a) 判断是不是数字
Number.isInteger(a) 判断数字是不是整数
Number.parseInt();
Number.parseFloat();

安全整数:

安全整数范围: -(2^53-1) 到 (2^53-1), 包含-(2^53-1) 和(2^53-1)
let a =-(253-1); //2的53次方
let b =2
53-1;
Number.isSafeInteger(a); //true
Number.MAX_SAFE_INTEGER 最大安全整数 就是253-1;
Number.MIN_SAFE_INTEGER 最小安全整数 就是-(2
53-1)

Math方法汇总,先总结下es5中常有的几种
1.min()和max()
Math.min()用于确定一组数值中的最小值。Math.max()用于确定一组数值中的最大值。

alert(Math.min(2,4,3,6,3,8,0,1,3)); //最小值alert(Math.max(4,7,8,3,1,9,6,0,3,2)); //最大值

2.舍入方法
Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;
Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;
Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数;
举例:

alert(Math.ceil(25.9)); //26alert(Math.ceil(25.5)); //26alert(Math.ceil(25.1)); //26alert(Math.floor(25.9)); //25alert(Math.floor(25.5)); //25alert(Math.floor(25.1)); //25alert(Math.round(25.9)); //26alert(Math.round(25.5)); //26alert(Math.round(25.1)); //25

3.random()方法
Math.random()方法返回介于0到1之间一个随机数,不包括0和1。如果想大于这个范围的话,可以套用一下公式:
值 = Math.floor(Math.random() * 总数 + 第一个值)
举例:

alert(Math.floor(Math.random() * 10 + 1));、//随机产生1-10之间的任意数
for (var i = 0; i<10;i ++) { 
    document.write(Math.floor(Math.random() * 10 + 5)); //5-14之间的任意数 
    document.write('<br />');
}

为了更加方便的传递想要范围,可以写成函数:

function selectFrom(lower, upper) { 
    var sum = upper - lower + 1; //总数-第一个数+1 
    return Math.floor(Math.random() * sum + lower);}
    for (var i=0 ;i<10;i++) { document.write(selectFrom(5,10)); //直接传递范围即可 document.write('<br />');
}

4.另外的简单整理下,一般用到的概率不太大
Math.abs(num) 返回num的绝对值
Math.exp(num) 返回Math.E的num次幂
Math.log(num) 返回num的自然对数
Math.pow(num,power) 返回num的power次幂
Math.sqrt(num) 返回num的平方根
Math.acos(x) 返回x的反余弦值
Math.asin(x) 返回x的反正弦值
Math.atan(x) 返回x的反正切值
Math.atan2(y,x) 返回y/x的反正切值
Math.cos(x) 返回x的余弦值
Math.sin(x) 返回x的正弦值
Math.tan(x) 返回x的正切值

es6新增的Math方法:
Math.trunc(num) 截取数字,只保留整数部分

Math.trunc(4.5)  ->  4
Math.trunc(4.9)  ->  4

Math.sign(num) 判断一个数到底是正数、负数、0

Math.sign(-5)  ->  -1表示负数
Math.sign(5)   ->  1 表示正数
Math.sign(0)   ->  0
Math.sign(-0)  ->  -0
Math.sign('abc')  ->    其他值,返回 NaN

Math.cbrt() 计算一个数立方根

Math.cbrt(27)  ->  3

ES2018(ES9):(以下部分了解即可,不熟悉正则可能比较难看懂)
1. 命名捕获
语法: (?<名字>)

之前做法演示:

let str = '2018-03-20';
let reg = /(\d{4})-(\d{2})-(\d{2})/;
let dateArr = str.match(reg);
let year = dateArr[1];
let month = dateArr[2];
let day = dateArr[3];
console.log(year, month, day);//2018 03 20

命名捕获方法实现:

let str = '2018-03-20';
let reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
let {year, month ,day} = str.match(reg).groups;
console.log(year, month, day);//2018 03 20

反向引用:
\1 \2
12
反向引用命名捕获:
语法: \k<名字>

let reg = /^(?<Strive>welcome)-\k<Strive>$/;
let str3 = 'welcome-welcome';
console.log(reg.test(str3));//true
匹配: ‘welcome-welcome’

let reg = /^(?<Strive>welcome)-\k<Strive>-\1$/;
let str4 = 'welcome-welcome-welcome';
console.log(reg.test(str4));//true
匹配: 'welcome-welcome-welcome'

替换:
格式:$<名字>

let str = '2018-03-20';
let reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
str = str.replace(reg,'$<day>/$<month>/$<year>');
console.log(str);//20/03/2018
let str = '2018-03-20';
let reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;

str = str.replace(reg, (...args)=>{
    //console.log(args)
    let {year, month, day} = args[args.length-1];
    return `${day}/${month}/${year}`;
 });
console.log(str);//20/03/2018
let reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
str =str.replace(reg,'$<day>/$<month>/$<year>');
console.log(str);
str = str.replace(reg, (...args)=>{
    //console.log(args)
let {year, month, day} = args[args.length-1];
    return `${day}/${month}/${year}`;
});
console.log(str);

2. dotAll 模式 s

之前 '.' 在正则里表示匹配任意东西, 但是不包括 \n
let reg = /\w+/gims;

let reg = /^\w+.\w+$/;
let str = 'welcomeβ51mmr';
console.log(reg.test(str));//true

let reg = /^\w+.\w+$/s;
let str = 'welcome\n51mmr';
console.log(reg.test(str));//true
//加上s后就可匹配,去掉就是false

3. 标签函数

function fn(){
}

fn()  //这样调用就是普通函数
fn`aaa`  //标签函数使用

演示

function fn(args){
    console.log(args);
    return 1;
}
console.log(fn`welcome`);//0: "welcome" length: 1 raw: ["welcome"] __proto__: Array(0)

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

推荐阅读更多精彩内容