2016年10月10日星期一

Google Blog 10/10/2016 (p.m.)

    • 使用new操作符后跟Object构造函数
    • 使用对象字面量表示法
    • 之后是一个冒号
    • 后面是一个逗号
    • 在最后一个属性后面添加逗号,会在IE7及更早版本和Opera中导致错误。
    • 数值属性名会自动转换为字符串
    • 如果留空其花括号,则可以定义只包含默认属性和方法的对象
    • 对象字面量也是向函数传递大量可选参数的首选方式
    • 基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中
      •  
      • 引用类型的值是对象,保存在堆内存中;

    • 执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为
    • 变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象
      • 每个执行环境都有,但是我们写代码的时候不能访问
    • 全局执行环境是最外围的一个执行环境
    • 在Web浏览器中,全局执行环境被认为是window对象
    • 每个函数都有自己的执行环境。当执行流进入一个函数时,函数的环境就会被推入一个环境栈中
    • with语句来说,会将指定的对象添加到作用域链中
    • catch语句来说,会创建一个新的变量对象,其中包含的是被抛出的错误对象的声明
    • 不能给基本类型的值添加属
    • 如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上
    • 访问变量有按值和按引用两种方式,而参数只能按值传递。
    • 但在检测引用类型的值时,这个操作符的用处不大
    • 检测基本数据类型时typeof是非常得力的助手
    • ECMA-262规定任何在内部实现[[Call]]方法的对象都应该在应用typeof操作符时返回"function"
    • 在IE和Firefox中,对正则表达式应用typeof会返回"object"
    • 推荐的做法是要么让函数始终都返回一个值,要么永远都不要返回值
    • 严格模式对函数有一些限制:
    • ECMAScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型
    • 命名的参数只提供便利,但不是必需的
    • 它的值永远与对应命名参数的值保持同步
      • 也就是说通过arguments去修改形参是生效并且同步的
    • 这并不是说读取这两个值会访问相同的内存空间;它们的内存空间是独立的,但它们的值会同步。
    • arguments对象的长度是由传入的参数个数决定
    • ECMAScript函数不能像传统意义上那样实现重载
    • 通过检查传入函数中参数的类型和数量并作出不同的反应,可以模仿方法的重载。
    • 最佳实践是始终使用代码块
    • 最常用于循环体中的代码至少要被执行一次的情形
    • ECMAScript对象的属性没有顺序。因此,通过for-in循环输出的属性名的顺序是不可预测的
    • 建议在使用for-in循环之前,先检测确认该对象的值不是nullundefined
    • 使用label语句可以在代码中添加标签,以便将来使用
      • 比较少用
    • breakcontinue语句都可以与label语句联合使用,从而返回代码中特定的位置。
    • 如果使用过度,也会给调试带来麻烦。
    • 主要是为了简化多次编写同一个对象的工作
    • with语句的代码块内部,每个变量首先被认为是一个局部变量,而如果在局部环境中找不到该变量的定义,就会查询location对象中是否有同名的属性。如果发现了同名属性,则以location对象属性的值作为变量的值。
    • 严格模式下不允许使用with语句,否则将视为语法错误
    • 大量使用with语句会导致性能下降,同时也会给调试代码造成困难,因此在开发大型应用程序时,不建议使用with语句
    • 假如确实需要混合几种情形,不要忘了在代码中添加注释,说明你是有意省略了break关键字
    • switch语句中使用任何数据类型
    • 每个case的值不一定是常量,可以是变量,甚至是表达式
    • switch语句在比较值时使用的是全等操作符,因此不会发生类型转换

Posted from Diigo. The rest of my favorite links are here.

没有评论:

发表评论