一、字符串的拓展
1.字符串的Unicode表示法。("\u0000"~"\uFFFF",如果超出这个范围的字符则用俩个双字节形式来表示。例如" “\u0000\uFFFF”)
//一共有六种方法表示一个字符
'\z' === 'z' //ture
'\172' === 'z' //ture
'\x7A' === 'z' //true
'\u007A' === 'z' //true
'\u{7A}' === 'z' //true
2.字符串的遍历器接口(for…of)。
let pp = "myFriends"
for(let i of pp){
console.log(i) //输出为"m","y","F","r"。。。
}
3.直接输入 U+2028 和 U+2029
以下字符串不能直接使用,只能使用转义例如反斜杠"\“或”\u005c"
U+005C:反斜杠(reverse solidus)
U+000D:回车(carriage return)
U+2028:行分隔符(line separator)
U+2029:段分隔符(paragraph separator)
U+000A:换行符(line feed)
4.模板字符串。
// 普通字符串
`In JavaScript '\n' is a line-feed.`
// 多行字符串
`In JavaScript this is
not legal.`
console.log(`string text line 1
string text line 2`);
// 字符串中嵌入变量
let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`
5.JSON.stringify()的改造。
JSON 数据必须是 UTF-8 编码,所以它改进了像"\u{AAAAA}“和”\uAAAA\uBBBB"这些的返回值。返回"’\u{AAAAA}’“和”’\uAAAA\BBBB’。
/
更多ES6字符串知识:http://es6.ruanyifeng.com/#docs/string
二、字符串的新增方法
1.String.fromCodePoint()(Unicode码点返回对应字符串)
String.fromCodePoint('029233') //"爱"
2.codePointAt()(字符串转字码)
3.includes(), startsWith(), endsWith()(确定字符串中是否包含另一个字符串,类似于indexOf(),三种方式都有另外一个参数表示开始搜索的位置。)
更多方法请参考:http://es6.ruanyifeng.com/#docs/string-methods
三、数值拓展
1.二进制和八进制写法
console.log(0o767 === 503) //0o开头八进制,true
console.log(0b111110111 ===503) //0b开头二进制,true
Number("0b111") //字符串数值转为十进制,返回7
2.Number.isFinite(),Number.isNaN()提供了判断数值是否为有限,是否为 NaN
Number.isFinite(8) //ture
Number.isFinite('15') //false
isFinite('15') //true,全局的isFinite方法与Number.isFinite区别在于全局的会把不是数值的值转为数值。
Number.isNaN(NaN) //ture
Number.isNaN(15) //false
Number.isNaN(ture) //false
··
3.Number.parseInt(),Number.parseFloat()
Number.parseInt('12.34') // 12
Number.parseFloat('123.45#') // 123.45
4.Number.isInteger()判断数值是否为整数。
Number.isInteger(15) //true
Number.isInteger(3.0) //true
Number.isInteger("15") //false
更多Math拓展:http://es6.ruanyifeng.com/#docs/number
四、函数拓展
1.rest参数
ES6有引入rest参数(…变量名),就可以不适用arguments对象。
//ES6写法
function add(...values) {
let sum = 0;
for (var val of values) {
sum += val;
}
return sum;
}
add(2, 5, 3)
//es5写法
function sortNumbers() {
return Array.prototype.slice.call(arguments).sort();
}
2.name属性(返回函数名)
function foo() {}
foo.name // "foo"
3.箭头函数
var f = (x,y)=>{
return x+y
}
//等同于
var f = function(x,y){
return x+y
}
(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
更多函数拓展请看:http://es6.ruanyifeng.com/#docs/function
五、数组拓展
1.拓展运算符(三个点(…)将一个数组转为用逗号分隔的参数序列)
console.log(...[1,2,3]) //1 2 3
console.log(1,...[2,3,4],5) //1,2,3,4,5
const arr = [
...(x>0?['a']:[]),
'b',
] //拓展运算符可以放置表达式
console.log(...[1, 2]) //1,2 拓展运算符
console.log((...[1, 2])) // Uncaught SyntaxError: Unexpected number
//代替函数的apply方法
//ES5写法
function f(x,y,z){
}
var args = [2,4,6];
f.apply(null,args)
//ES6写法
f(...args);
//求出一个数组的最大值
Math.max.apply(null,[1,34,23])
Math.max(...[1,34,23]) //相当于Math.max(1,34,23)
//通过push添加到另一个数组尾部。
let arr1 = [1,23,34]
let arr2 = [2,3,4]
arr1.push(...arr2)
2.Array.from()(将两类对象转为真正的数组:类似数组的对象和可遍历的对象)
let arrLike = {
"0":"a",
"1":"b",
"2":"c",
"3":"d"
}
var arr1 = [].slice.call(arrLike) //["a","b","c"]
//ES6
let arr2 = Array.from(arryLike) //["a","b","c"]
3.Array.of()(将一组值转换为数组)
Array.of(3,11,8) //[3,11,8]
4.数组实例的copyWithin(target, start = 0, end = this.length)(指定的成员复制到其他位置上)
target(必需),从该位置开始替换数据,如果为负数表示倒数。
start(可选),从该位置开始读位置。默认为零
end(可选),默认为目前停止读取数据,默认为length
[1,23,45,55,33].copyWithin(0,2,4) //[45,55,45,55,33]
[].copyWithin.call({length:1,3:0},2,5) //[length:1,3:0,2]
5.数组实例的find()和findIndex()
[1,2,-54,10].find((n) => n<0) //-54,参数为回调函数(参数为当前值,当前下标,原数组)
[1,2,-54,10].findIndex((n) => n<0) //2,y参数与find()相同,返回下标值,没有时返回-1;
6.数组实例的fill()(填充一个数组(参数和copyWithin一样))
更多数组方法和拓展请参考:http://es6.ruanyifeng.com/#docs/array