ECMAScript6学习简记(三)- 函数扩展

Create at 2015 09 099 min read技术学习笔记es6

1.函数参数默认值

以前我们经常会些下面的代码

function doS(e) {
  e = e | window.e
  //doSomeThing with e
}

通过这样的方法来给函数设置默认值,这样有一个缺点就是,如果传进来的参数对应的布尔值为false,比如空字符串或者 0,那就尴尬了。

所以如果我们还想上面的代码得到正确的结果,就需要对 e 在做一个判断,判断它是否被赋值了。

这样会很麻烦,所以 ES6 有了新的方法,如下

function doS(e = window.e) {
  //doSomeThing with e
}

这样不尽代码简短了很多,而且可读性大大提高,看代码的人可以一样看到那些参数是有默认值的。

同时,默认值的设置也非常人

ECMAScript6学习简记(二)- 数组扩展

Create at 2015 09 026 min read技术学习笔记es6

Array.from()

将类数组或可迭代对象转换为真正的数组。

可转换的类别

Dom 集合

let ps = document.querySelectAll("p") //通过Array.from 转换后可以使用forEach方法
Array.from(ps).forEach(function (p, index) {
  "use strict"
  console.log(p, index)
})

arguments 对象

function foo() {
  "use strict"
  var args = Array.from(arguments) //可以替代以前下面这种方式来转换
  var argvs = Array.prototype.slice.call(arguments)
  console.log(argvs, args)

let 和 const 命令

let 命令

let 声明的变量,只存在与所声明的代码块内。

{
  let a = 10
  var b = 11
}
console.log(a) //ReferenceError: a is not defined
console.log(b) //11

可以看到,在代码块外面,是不能访问到用 let 声明的变量,也就是说 let 声明的变量是基于块级作用域的。这样就可以避免一些变量声明的问题。

var arr = [1, 2, 3]
for (let i = 0; i < arr.length; i++) {}
console.log(i) //ReferenceError: a is not defined

可见上面的的代码 for 循环外面是不能访问到变量