让前端飞饥人谷技术博客

一些没注意的点

2019-04-03  本文已影响1人  JaniceZD

本文将持续更新前端学习中遇到的一些问题,以及需要注意的点。

1. let 命令

ES6 新增了 let 命令,用来声明变量。它的用法类似于 var,但是所声明的变量,只在 let 命令所在的代码块内有效。

{
  let a = 10;
  var b = 1;
}

a // ReferenceError: a is not defined.
b // 1

这表明,let 声明的变量只在它所在的代码块有效。

for 循环的计数器,就很合适使用 let 命令。

for (let i = 0; i < 10; i++) {
  // ...
}

console.log(i);
// ReferenceError: i is not defined

上面代码中,计数器 i 只在 for 循环体内有效,在循环体外引用就会报错。

var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}

上面代码中,存在全局变量 tmp,但是块级作用域内 let 又声明了一个局部变量 tmp,导致后者绑定这个块级作用域,所以在 let 声明变量前,对 tmp 赋值会报错。

2. 对象属性的读取

读取对象的属性,有两种方法,一种是使用点运算符,还有一种是使用方括号运算符。

var obj = {
  p: 'Hello World'
};

obj.p // "Hello World"
obj['p'] // "Hello World"

请注意,如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。

var foo = 'bar';

var obj = {
  foo: 1,
  bar: 2
};

obj.foo  // 1
obj[foo]  // 2

注意,数值键名不能使用点运算符(因为会被当成小数点),只能使用方括号运算符。

var obj = {
  123: 'hello world'
};

obj.123 // 报错
obj[123] // "hello world"

上面代码的第一个表达式,对数值键名 123 使用点运算符,结果报错。第二个表达式使用方括号运算符,结果就是正确的。

3. Array 对象的方法 forEach()

forEach 方法将数组的所有成员依次传入参数函数,并依次执行。
forEach 方法接受一个函数作为参数。该函数调用时,forEach 方法向它传入三个参数:当前值、当前位置、整个数组。

function log(element, index, array) {
  console.log('[' + index + '] = ' + element);
}

[2, 5, 9].forEach(log);
// [0] = 2
// [1] = 5
// [2] = 9
上一篇下一篇

猜你喜欢

热点阅读