JavaScript语言精粹 读书笔记(二)

for in 语句可以用来遍历一个对象中的所有属性名。这个枚举过程将会列出所有的属性——包括函数和可能不关心的原型中的属性,所以有必要过滤那些不想要的值。最常用的过滤器是 hasOwnProperty 方法,以及使用 typeof 来排除函数:
     var name;
     for (name in another_stooge) {
          if (typeof another_stooge[name] !== 'function') {
               document.writeln(name + ': ' + another_stooge[name]);
          }
     }

属性名出现的顺序是不确定的,因此要对任何可能出现的顺序有所准备。如果想要确保属性以特定的顺序出现,最好的办法就是完全避免使用 for in 语句,而是创建一个数组,在其中以正确的顺序包含属性名:
     var i;
     var properties = [
          'first-name',
          'middle-name',
          'last-name',
          'profession'
     ];
     for (i = 0; i < properties.length; i++) {
          document.writeln(properties[i] + ': ' + another_stooge[properties[i]]);
     }
通过使用 for 而不是 for in,可以得到我们想要的属性,而不用担心可能发掘出原型链中的属性,并且我们按正确的顺序取得了它们的值。

delete 运算符可以用来删除对象的属性。如果对象包含该属性,那么该属性就会被移除,它不会触及原型链中的任何对象。

删除对象的属性可能会让来自原型链中的属性透现出来。
delete another_stooge.nickname;

减少全局变量污染

JavaScript可以很随意的定义全局变量来容纳应用的所有资源。但是全局变量削弱了程序的灵活性,应避免使用。

最小化使用全局变量的方法之一是为应用只创建一个唯一的全局变量:

     var MYAPP = {};
     这时这个变量编程了应用的容器:
     MYAPP.stooge = {
          "first-name": "Joe",
          "last-name": "Howard"
     };

     MYAPP.flight = {
          airline: "Oceanic",
          number: 815,
          departure: {
               IATA: "SYD",
               time: "2014-11-18 16:50",
               city: "Beijing"
          },
          arrival: {
               IATA: "SYD",
               time: "2014-11-18 16:50",
               city: "Beijing"
          }
     };
只要把全局性的资源都纳入一个名称空间之下,你的程序与其他应用程序、组件或类库之间发生冲突的可能性就会显著降低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值