廖雪峰JS学习总结-入门篇

3,800 阅读2分钟

最近在刷廖雪峰的JS教程,把里面的自己不太清楚的东西在刷一遍。
教程网址:www.liaoxuefeng.com/wiki/001434…

数据类型:
  • 简单类型:StringNumberBooleanNullUndefined
  • 复杂类型: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把nullundefined0NaN和空字符串''视为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类型,ArrayMapSet都属于iterable类型。
  • 具有iterable类型的集合可以通过新的for ... of循环来遍历。(只会循环集合本身)
  • 更好的方式是直接使用iterable内置的forEach方法,它接收一个函数,每次迭代就自动回调该函数。
    Array下输出的为(element, index, array);
    Map下输出的为(value, key, map);
    Set下输出的为(element, sameElement, set); // Set没有索引,因此回调函数的前两个参数都是元素本身