ES6入门之let、const、解构赋值、字符串string新特性、数值的扩展
最近在看es6的一些新的方法和属性,太细的就不在这里分享了,把看到的总结这里跟大家分享一下...文章可能会有点长,但应该都是不烧脑的~~
1.let关键字
用let声明变量只在块级作用域起作用,适合在for循环使用,也不会出现变量提升现象。同一个代码块内,不可重复声明的相同变量,不可重复声明函数内的参数。
2.const
const也是用于声明一个常量,并必须赋值,声明后不可修改,跟let一样,只在块级作用域起作用,不可重复声明同一个变量,不会变量提升,声明引用类型的常量时,要注意是传址赋值。
3.解构赋值
数组解构
var [a,b,c=3] =[1,2,4]; console.log(a);//结果:a的值为1 console.log(b);//结果:b的值为2 console.log(c);//结果:c的值为4
对象解构
var { a,b,c} = {"a":1,"b":2,"c":3}; console.log(a);//结果:a的值为1 console.log(b);//结果:b的值为2 console.log(c);//结果:c的值为3
字符串解构
var [a,b,c,d,e,f] = "我是字符串"; console.log(a);//我 console.log(b);//是 console.log(c);//字 console.log(d);//符 console.log(e);//串 console.log(f);//undefined
解构赋值给我们一种新的变量赋值方式,主要可以利用数组解构赋值和对象解构赋值。它的用途包括:交换变量值,提取函数返回值,函数参数定义,默认值设定等等,都给我们编程带来便利,在未来的代码中会见到越来越多人使用这个新特性。
4.字符串String新特性
模板字符串
let name = "Jacky"; let occupation = "doctor"; //模板字符串拼接 let str = `He is ${name},he is a ${occupation}`;//这里需要注意的是反引号 //支持表达式运算 var obj = {"a":1,"b":2}; var str = `the result is ${obj.a+obj.b}`; //支持函数调用 function fn() { return 3; } var str = `the result is ${ fn() }`;
标签模板
var name = "张三"; var height = 1.8; tagFn`他叫${name},身高${height}米。`; //标签+模板字符串 //定义一个函数,作为标签 function tagFn(arr,v1,v2){ console.log(arr); //结果:[ "他叫",",身高","米。" ] console.log(v1); //结果:张三 console.log(v2); //结果:1.8 }
repeat函数
var name1 = "我是字符串"; //目标字符串 var name2 = name1.repeat(3); //变量name1被重复三次; console.log(name1); //结果:我是字符串 console.log(name2); //结果:我是字符串我是字符串我是字符串
includes函数
var name = "字符串"; //目标字符串 name.includes('串'); //true, 含有 name.includes('web'); //false, 不含有 name.includes('字',1); //false, 从第2个字符开始搜索, 不含有
startsWith函数
var name = "字符串"; //目标字符串 name.startsWith('字'); //true,出现在开头位置 name.startsWith('符'); //false,不是在开头位置 name.startsWith('符',1); //true,从第2个字符开始
endsWith函数
var name = "我是字符串啊"; //目标字符串 name.endsWith('我'); //false,不在尾部位置 name.endsWith('串'); //true,在尾部位置 name.endsWith('啊',5); //false,只针对前5个字符 name.endsWith('啊',6); //true,针对前6个字符
String.raw函数
console.log(String.raw`hello\nwolrd`); //输出:hello\nwolrd
5.数值的扩展
- 数值方法之前都是在window下的方法,es6都移动了Number对象下了,目的就是减少全局函数,增强模块化...
Number.isNan函数判断非数值
Number.isNaN(2.5); //结果:false
与之前window.isNaN用法不同的是,之前会把字非数值转换了再判断,现在是直接判断不转换
Number.isFinite函数 用来检查一个数值是否非无穷
Number.isFinite(1); //结果:true,数值1是有穷,即非无穷 Number.isFinite(Infinity); //结果:false,Infinity表示无穷大的特殊值 Number.isFinite('abc'); //结果:false
Number.parseInt函数解析一个字符串,返回一个整数
//传统用法: parseInt('12.3abc'); //结果:返回数值12 //ES6用法: Number.parseInt('12.3abc'); //结果:返回数值12
Number.parseFloat函数解析一个字符串,返回一个浮点数
//传统用法: parseInt('12.3abc'); //结果:返回数值12 //ES6用法: Number.parseInt('12.3abc'); //结果:返回数值12
Number.isInteger函数 用来判断是否为整数
Number.isInteger(3.2); //结果:false Number.isInteger(3); //结果:true
Math.trunc函数去除一个数的小数部分
Math.trunc(3); //结果:3 Math.trunc(3.1); //结果:3
Math.sign函数用来判断是正数,负数,还是零
Math.sign(3); //结果:1 Math.sign(-3); //结果:-1 Math.sign(0); //结果:0 Math.sign('abc'); //结果:NaN
Math.cbrt函数计算一个数的立方根
Math.cbrt(8); //结果:2 Math.cbrt(27); //结果:3
ES6对Number对象新增了isInteger函数、极小常量Number.EPSILON、安全整数;还将window对象下的4个函数移植到了Number对象下;此外,对Math对象扩展了17个新函数。