JavaScript 语言精粹小记(对象篇)

254 阅读1分钟

JavaScript 语言精粹小记(对象篇)

温故而知新,跟随 DouglasCrockford大师,了解JS语言的精髓所在 ,持续更新!

对象篇目

|| 运算符 可以用来填充默认值

const res = obj.name || 'hello';

对象 通过引用来传递,他们永远不会复制

var a = {} , b = {} , c = {},
a = b = c 
// 三者都引用了一个空对象

反射

检查对象中的值的类型

typeof obj.name // string
typeof obj.age // number
typeof obj.tins // undefinded 

// 原型链中的值
typeof obj.constructor // function
typeof obj.toString // function

处理掉这些不需要的属性

  • 检查并丢弃类型为函数的属性
  • 使用 hasOwnProperty() 检查属性
obj.hasOwnProperty('age')  //true
obj.hasOwnProperty('constructor') //false

枚举

  • 两种方式

    • for in 枚举对象中的属性值,但是所有属性都会被枚举 包括原型链 ,同时没有枚举没有顺序
    • for (let item in obj){
          if(typeof obj[item] !== 'function'){
              console.log(obj.item);
          }
      }
      
    • 使用for 数组进行遍历 确保顺序 同时不会属性
    • const arr = [
          'name',
          'age',
          'sex'
      ]
      for(let i = 0 ; I < arr.length ; I++){
          console.log(obj[arr[i]]);
      }
      

删除

  • obj.delete 运算符 可以用来删除对象 的属性。

    • 删除不涉及原型链中的属性

    • 删除可能会导致原型链中的属性暴露出来

减少全局变量的污染

  • javascript 可以很随意的定义全局变量,但是全局变量削弱了程序的灵活性,应避免使用
  • 最小化使用全局变量的方法之一就是为你的应用只创建一个唯一的全局变量(顶层结构)

    • 减少与其他应用的冲突,并且增加可读性
Var MYAPP = {};

MYAPP.storage = {
    name: 'sss',
    age: 15
};

参考文献 《JavaScript语言精粹》