最近在刷廖雪峰的JS教程,把里面的自己不太清楚的东西在刷一遍。
教程网址:http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000
数据类型:
- 简单类型:
String
、Number
、Boolean
、Null
、Undefined
- 复杂类型:
Object
- ES6新增类型:
Symbol
(感谢TimeTraveler指出)
数组:
- 修改Array中索引不会有任何错误,不建议修改Array大小,并且确保索引不会越界。
对象:
- 对象的属性名如果不是一个有效的变量,例如
middle-school
,就需要用''括起来。访问这个属性也无法使用.操作符,必须用['xxx']
来访问。(可以利用这个方式获取部分自动生成属性值) - 可以利用
in
判断一个对象的属性是否存在,当是需要注意,它可能是对象继承得到的,例如:
var xiaoming = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};
'name' in xiaoming; // true
'grade' in xiaoming; // false
'toString' in xiaoming; // true(由object继承而来)
- 可以用
hasOwnProperty()
方法来判断一个属性是否为对象自身拥有的属性,例如:
var xiaoming = {
name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false
条件判断:
-
if...else...
语句的执行特点是二选一,在多个if...else...
语句中,如果某个条件成立,则后续就不再继续判断了。 - JavaScript把
null
、undefined
、0
、NaN
和空字符串''
视为false,其他值一概视为true
。
循环:
- for循环的一个变体是
for ... in
循环,它可以把一个对象的所有属性依次循环出来,需要注意的是,循环会把继承的属性加上,如果要过滤掉对象继承的属性,用hasOwnProperty()
来实现:
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
if (o.hasOwnProperty(key)) {
alert(key); // 'name', 'age', 'city'
}
}
iterable:
- 为了统一集合类型,ES6标准引入了新的
iterable
类型,Array
、Map
和Set
都属于iterable
类型。 - 具有
iterable
类型的集合可以通过新的for ... of
循环来遍历。(只会循环集合本身) - 更好的方式是直接使用
iterable
内置的forEach
方法,它接收一个函数,每次迭代就自动回调该函数。
Array下输出的为(element, index, array);
Map下输出的为(value, key, map);
Set下输出的为(element, sameElement, set); // Set没有索引,因此回调函数的前两个参数都是元素本身
网友评论