es 6 学习笔记 常用的几种

一. let (声明变量)

比var 的优点:1.有了 块级作用域 2.不存在了变量提升

console.log(foo); // 输出undefined

console.log(bar); // 报错ReferenceError

var foo = 2; let bar = 2;

3.在代码块内,使用let命令声明变量之前,该变量都是不可用的

var tmp = 123;

if (true) {

tmp = 'abc'; // ReferenceError let tmp;

}

二.const (声明常量) 一旦声明 立即要初始化

const  = 3.3333 1. 有了 块级作用域 2. 不存在了变量提升 3. 常量不能被改变,常量声明为一个对象时,不能改变的是指向的地址,里面的值还是能变的。4.想将对象冻结,可以使用const foo = Object.freeze({});

三 全局变量

es5 中 未声明的全局变量,自动成为全局对象window的属性,如 :a =1 window.a //1 

ES6为了改变这一点,一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是全局对象的属性;另一方面规定,let命 令、const命令、class命令声明的全局变量,不属于全局对象的属性。

let b = 1; window.b // undefined

四 变量的解构赋值

1. 数组的解构

    模式匹配写法 let [a,b,c] = [1,2,3]  a//1 b//2 c//3

     解构可以赋予默认值  [x, y = 'b'] = ['a', undefined]; // x='a', y='b'

2.对象的解构

var { foo, bar } = { foo: "aaa", bar: "bbb" }; foo //aaa ,bar //bbb

数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才 能取到正确的值。五 字符串的扩展

1.可以用 for of 遍历字符串

for (let codePoint of 'foo') {

console.log(codePoint)

} // "f"  // "o "//"o"

2.模板字符串

//所有模板字符串的空格和换行,都是被保留的,trim方法消除它
$('#list').html(`
  • first
  • second
`.trim()); //有变量的时候 `User ${user.name} is not authorized to do ${action}.`

不用在拼接字符串 

六 Number 的扩展方法

1.Number.parseInt(), Number.parseFloat()

// ES5的写法 
parseInt('12.34') // 12 
parseFloat('123.45#') // 123.45 
// ES6的写法 
Number.parseInt('12.34') // 12 
Number.parseFloat('123.45#') // 123.45  

这样做的目的,是逐步减少全局性方法,使得语言逐步模块化。

2 Number.isInteger() 

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

Number.isInteger(25) // true
Number.isInteger(25.0) // true
Number.isInteger(25.1) // false
Number.isInteger("15") // false
Number.isInteger(true) // false

七  Math 的扩展方法

1.Math.trunc()
Math.trunc方法用于去除一个数的小数部分,返回整数部分。
Math.trunc(4.1) // 4
Math.trunc(4.9) // 4
Math.trunc(-4.1) // -4
Math.trunc(-4.9) // -4
Math.trunc(-0.1234) // -0
2.Math.sign()
Math.sign方法用来判断一个数到底是正数、负数、还是零。
它会返回五种值。
参数为正数,返回+1;
参数为负数,返回-1;
参数为0,返回0;
参数为-0,返回-0;
其他值,返回NaN。
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN
Math.sign('foo'); // NaN
Math.sign(); // NaN

八 数组的扩展方法

1. Array.from方法用于将两类对象转为真正的数组

let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
// ES6的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。
Array.from(arrayLike, x => x * x);
// 等同于
Array.from(arrayLike).map(x => x * x);
Array.from([1, 2, 3], (x) => x * x)
// [1, 4, 9]

2.Array.of()

Array.of方法用于将一组值,转换为数组。
Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]
Array.of(3).length // 1

3. Array.includes()

Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似。该方法属于ES7,但Babel转码器
已经支持。
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, NaN].includes(NaN); // true

没有该方法之前,我们通常使用数组的indexOf方法,检查是否包含某个值。
if (arr.indexOf(el) !== -1) {
// ...
}

九  函数的扩展方法

1 增加了函数参数的默认值

//以前的写法
function log(x, y) {
y = y || 'World';
console.log(x, y);
}
log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello World
缺点 :如果参数被赋的值 返回的是false 就被改为了 默认值
es6 写法

function log(x, y = 'World') {
console.log(x, y);
}
log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello

传递参数的时候 就给了默认值 undefined 可以触发默认值 null 不行

2 函数参数中的 rest 参数 

ES6引入rest参数(形式为“...变量名”),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest参数搭配的变量是一个数组,该变量将 多余的参数放入数组中。

rest参数中的变量代表一个数组,所以数组特有的方法都可以用于这个变量。下面是一个利用rest参数改写数组push方法的例子。

function push(array, ...items) {
items.forEach(function(item) {
array.push(item);
console.log(item);
});
}
var a = [];
push(a, 1, 2, 3)

 3 函数参数中的扩展运算符 

扩展运算符(spread)是三个点(...)。它好比rest参数的逆运算,将一个数组转为用逗号分隔的参数序列。

function add(x, y) {
return x + y;
}
var numbers = [4, 38];
add(...numbers) // 42

  扩展运算符的作用

1. 可以展开数组,代替了js 的 apply 方法 不需要再用apply方法 把数组转换成函数的参数了

// ES5的写法
function f(x, y, z) {
// ...
}
var args = [0, 1, 2];
f.apply(null, args);

2. 合并数组

// ES5的合并数组
arr1.concat(arr2, arr3);
// [ 'a', 'b', 'c', 'd', 'e' ]
// ES6的合并数组
[...arr1, ...arr2, ...arr3]
// [ 'a', 'b', 'c', 'd', 'e' ]

 

 

 

 

你可能感兴趣的:(es6)