hasOwnProperty()方法 和 delete 运算符
o = new Object();
o.prop = 'exists';
function changeO() {
o.newprop = o.prop;
delete o.prop;
}
o.hasOwnProperty('prop'); // 返回 true
changeO();
o.hasOwnProperty('prop'); // 返回 false
hasOwnProperty(): 参数是 string 类型
判断是否含有特定的自身属性,不包括从原型链上继承的属性。
作用:
遍历一个对象的所有属性时忽略掉继承属性
var buz = {
fog: 'stack'
};
for (var name in buz) {
if (buz.hasOwnProperty(name)) {
alert("this is fog (" + name + ") for sure. Value: " + buz[name]);
}
else {
alert(name); // toString or something else
}
}
Object.getOwnPropertyNames()
返回一个由指定对象的所有自身属性的属性名组成的数组。
var buz = {
nnnnnnnn: 'stack',
a: function(){},
c: []
};
console.log(Object.getOwnPropertyNames(buz));//['nnnnnnnn','a','c']
运算符优先级:
++/- - > typeof > void > delete > */(乘除) 等
题目:
假设 output 是一个函数,输出一行文本。下面的语句输出结果是什么?
output(typeof (function() {output(“Hello World!”)})());
// 输出: Hello World! undefined
//1.先立即执行匿名函数,输出Hello World!
//2.函数执行后无返回值,则输出未定义
题目:
var test=undefined;
typeof test==’undefined’; // 返回的是true, 因为 typeof test 返回的就是一个字符串 ‘undefined’
闭包
作用:
1. 一个是前面提到的可以读取函数内部的变量
2. 另一个就是让这些变量的值始终保持在内存中
函数调用
当函数被调用时,会创建一个执行环境及相应的作用域链,argument和实参为其进行初始化。
这里f1()函数和f2()函数在调用时会创建两个执行环境,保存各自的变量对象,结果是没有关系的。而同一个函数在多次调用时返回值会被保存在同一个变量对象中。