此篇只是笔记,在借鉴、参考、模仿的过程,可能不完整,请多指教!javascript
定义插件名称要注意命名冲突,防止全局污染。java
1.第一种Javascript对象命名:(Javascript语言是“先解析,后运行”,解析时就已经完成了变量声明,因此 a等同于b。var命令的"代码提高"(hoisting)做用。Javascript解释器,只"提高"var命令定义的变量,对不使用var命令、直接赋值的变量不起做用,这就是为何不加var会报错的缘由)浏览器
a.等同于 b.
this
2.第二种写法:插件
window是javascript的顶层对象,全部的全局变量都是它的属性。判断window对象是否有myObj属性,这样能够避免由于没有定义myObj而出现ReferenceError错误。不过,从代码的规范性考虑,最好仍是对第二行加上var。设计
3.第三种写法:3d
第二种写法缺点在于,在某些运行环境中,window未必是顶层对象。在全局变量的层面中,this关键字老是指向顶层变量,因此就能够独立于不一样的运行环境。因此改为:对象
4.第四种写法blog
上面这样写可读性较差,并且this的指向是可变的,容易出错,因此进一步改写:ip
5.第五种写法
使用 typeof 运算符,判断myObj 是否有定义。(目前使用最普遍的判断javascript对象是否存在的方法。)
6.第六种写法
因为在已定义、但未赋值的状况下,myObj的值直接等于undefined,这种是定义的是undefined类型,不是字符串"undefined"。(undefined在老一辈的浏览器是不被支持的)。 因此上面的写法能够简化:
精确比较:
7.第七种写法
根据javascript的语言设计,undefined == null,因此比较myObj是否等于null。
8.第八种写法
使用in运算符,判断myObj是否为顶层对象的一个属性
9.第九种写法
使用hasOwnProperty方法,判断myObj是否为顶层对象的一个属性