function isArrayOrObject(target) {
var toStr = Object.prototype.toString,
arrStr = '[object Array]';
if(toStr.call(target) == arrStr) {
return 'this is Array';
}else{
return 'this is Object';
}
}
这样可以略过数组和对象本身的toString进而执行Object的toString方法
function type(target) {
var typeStr = typeof(target),
toStr = Object.prototype.toString,
objStr = {
"[object Object]" : "_objectObject_",
"[object Array]" : "_arrayObject_",
"[object Number]" : "_numberObject_",
"[object Boolean]" : "_booleanObject_",
"[object String]" : "_stringObject_"
}
if(target === null){
return null;
}else if(typeStr === "function"){
return "function";
}
if(typeStr !== "object"){
return typeStr;
}else{
return objStr[toStr.call(target)];
}
}
注意判断对象类型时, 有一个简单的方法为 object.prototype.toString.call(对象名)
var obj = {
name : 'acx',
age : 12,
sex : 'female'
}
for(var prop in obj){
console.log(obj[prop]);
}
也可以把var prop写在外面, var prop; for(prop in obj){ }
但要注意: 最后一句为 obj[prop]
1 . hasOwnProperty
遍历自身属性, 继承的不显示
Person.prototype.name = 'acx';
function Person() {
this.age = 132;
this.sex = "female";
}
var person = new person();
for(var prop in person) {
if(person.hasOwnProperty(prop)) {
console.log(person[prop]);
}
}
2 . in
看看一个属性是不是这个对象的属性, 是的话返回true
var obj = {
name : 'acx',
age : 12,
sex : 'female'
}
console.log('name' in obj);
注意: 属性名称为字符串
3. instanceof
看看前面的对象是不是后面构造出来的, 是的话返回true
function Person() {
}
var person = new Person;
person instanceof Person;
用处:
var num = (function (n){
if(n == 1) {
return 1;
}
return n * arguments.callee(n - 1);
}(100))
立即执行函数时返回函数名
function demo() {
test();
}
function test() {
console.log(test.caller)
}
demo();