命名空间
通过闭包来实现变量的私有化,来解决命名冲突的问题,防止污染全局变量
var initDemo1 = (function(){
var name =222;
function callName(){
console.log(name);
}
return function(){
callName();
}
}())
var initDemo = (function(){
var name =123;
function callName(){
console.log(name);
}
return function(){
callName();
}
}())
一般来说 init命名的函数作为入口函
属性的调用方法 . [‘string’]
- 通过deng[‘ddd’] 来调用deng的ddd方法
var deng = {
wife1:{name : 'xiaohu'},
wife1:{name : 'xiaomao'},
wife1:{name : 'xiaogou'},
wife1:{name : 'xiaozhu'},
sayWife : function (num){
return this['wife' + num];
}
}
对象的枚举(遍历),for in 循环 forin循环用于对象遍历中
操作符 hasOwnproperty in instanceof
let obj = {
a : 123,
b : 234,
c : 345
}
for(let key in obj){
console.log(key);
}
key为 obj中的每个属性
let obj1 = {
a : 123,
b : 234,
c : 345
}
for(let key in obj1){
console.log(obj1[key]);
// 如果为obj.key 则会打印出3个undefined
// 因为 obj.key 解释器会把它理解为obj里面的key属性
//obj里面没有key属性,所以打印undefined
}
如果为obj.key 则会打印出3个undefined,因为 obj.key 解释器会把它理解为obj里面的key属性,而obj里面没有key属性,所以打印undefined
- 在枚举里面访问属性,只能用[] 的方法访问 而不能用 . 的方法访问
let obj1 = {
a : 123,
b : 234,
c : 345,
__proto__ : {
lastName : "last"
}
}
for(let key in obj1){
console.log(obj1[key]);
}
遍历obj1 会把原型的属性也遍历出现 但是不会遍历系统自设的属性
当只想遍历自己的属性时,可以用hasOwnProperty(’’)
let obj1 = {
a : 123,
b : 234,
c : 345,
__proto__ : {
lastName : "last"
}
}
for(let key in obj1){
if(obj1.hasOwnProperty(key)){
console.log(obj1[key]);
}
}
hasOwnProperty(“key”) 用于判断这个属性是不是自己的 ,返回的结果为布尔值
if('key' in obj)
‘属性’ in obj 判断这个属性在不在obj中(obj能不能访问这个属性),继承来的属性可可以访问,返回值为布尔值
A instanceof B
instanceof 判断 A对象的原型链上 有没有B的原型
当返回这个变量 ,有可能是数组有可能是对象 就可以用instanceof来判断
判断数组还是对象的三种方法
- constructor
数组的constructor是Array 对象的construtor是Object
- instanceof
[] isntanceof Array true {} instanceof Array false
- toString
Object.prototype.toString.call([]); 返回[object Array]
Object.prototype.toString.call(123); 返回[object Number]
Object.prototype.toString.call({}); 返回[object Object]