js 对象,键值对组成的无序集合,键是字符串,值是任意类型。
    var aa = {ba:null},定义对象时,键无需引号

    对象的属性访问,使用点或者[“key”],删除属性用 delete,判断属性是否存在用 in,”toString” in obj

    模板字符串
    var aa = “bb”
    test${aa}===”testbb”

    字符串不可变,对索引赋值无效。

    Array 的 sort 方法就地排序

    // 遍历

    • Map, Set, Array 都是 iterator 类型,可通过 for of 遍历元素
    • for in 遍历的是对象属性的名称,Array 的索引可看作对象属性的名称。
    • obj.forEach(function(e, i, objself){}) Map, e是value,i是key;Array e是元素,i是索引;Set e和i都是元素
    • Array 遍历的另一种方法 map,返回另一个数组。
    • filter 也可遍历,返回筛选后的数组,参数也是(e, i, objself)

    // 作用域
    var 最小作用域单位是 函数。let 解决了块级作用域问题。const 和 let 都具有块级作用域
    全局对象,window

    //解构赋值
    数组解构赋值,交换
    对象解构赋值,参数传递

    要保证this指向正确,必须用obj.xxx()的形式调用

    函数.apply(),函数.call(),能解决函数内部的 this 指向。apply 会将参数打包。

    // 利用闭包封装一个私有变量
    function foo(init_val) {
    int x = init_val;
    return {
    inc: function(){x++; return x}
    }
    }
    // 利用闭包冻结参数

    // 箭头函数
    ()=>{}
    箭头函数的this由上下文决定

    // 面向对象
    一个对象的原型是另外一个对象,没有类和实例的概念。通过Object.create 达到类似继承的效果。
    var uu = {a:1}
    var kk = Object.create(uu)
    kk.proto === uu

    1. function Student(props) {
    2. this.name = props.name || '匿名'; // 默认值为'匿名'
    3. this.grade = props.grade || 1; // 默认值为1
    4. }
    5. Student.prototype.hello = function () {
    6. alert('Hello, ' + this.name + '!');
    7. };
    8. function createStudent(props) {
    9. return new Student(props || {})
    10. }

    // 浏览器对象
    window,浏览器窗体,全局对象
    screen,屏幕信息
    navigator,浏览器信息
    location,当前url信息
    document,当前dom树