命名空间
管理变量,防止污染全局,适用于模块开发。
多个人合作开发时,变量名就很可能会重复,这时就会导致许多问题,比如我的变量还没有使用就先被别人的覆盖了。
把特定的功能写到一个闭包里面,留出一个接口方便之后启动它。
var name = 'bcd';
var init = (function () {
var name = 'abc';
function callName(){
console.log(name);
}
return function () {
callName();
}
}())
init(); //abc
//内部属性私有化,不会被覆盖
对象枚举
查看对象属性
程序在执行时会传入数据,我们并不知道对象的属性是什么,有多少。那么要怎样去查看它呢
- for in 循环
var obj = {
name : 'sunny',
age : 123,
sex : "male";
height : 180;
}
//实现对象的遍历
//'prop'这个名字是自己命名的
for(var prop in obj){
console.log(prop); //name age sex height
console.log(obj.prop); //undefined(*4)
//prop是字符串类型的,此时的obj.prop相当于obj['prop'],
//会将prop当作一个属性,而obj中没有这个属性,所以结果是undefined
console.log(obj[prop]);
}
-
hasOwnProperty方法
for in 循环会将所有的属性(自身的和原型上的)都打印出来,hasOwnProperty方法用来判断属性是自己的还是原型上的,返回值为布尔值。
for(var prop in obj) {
if(obj.hasOwnProperty(prop)){
console.log(obj.[prop]);
}
}
-
in
判断属性是否存在在对象中,并且自身的和原型上的属性都判断为true,也就是判断此 属性能不能被这个对象访问。
-
instanceof
A instanceof B --> 判断A对象是不是B构造函数构造出来的(看A对象的原型链上有没有B的原型)
typeof([]) --> Object
typeof({}) --> Object
如果一个数据有可能是数组也有可能是对象,那怎样判断它的数据类型
三种方法