您的位置:首页 > Web前端 > JavaScript

javascript封装判断全数据类型方法, toString方法, 对象的枚举(in, instanceof, hasOwnProperty的用法), arguments类数组属性

2016-10-27 23:01 1246 查看

知识点

toString方法



打印出来的是”成哥很帅”, 证明出来数组打印时调用出来的是toString方法

判断数组和对象

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(对象名)

正常计算数字大概小数点后15位

对象的枚举

for in

例: 遍历对象里面的属性

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;


a instanceof b
判断a的原型链上, 有没有b的原型

arguments//类数组

arguments.callee

指向函数的本身





用处:

var num = (function (n){
if(n == 1) {
return 1;
}
return n * arguments.callee(n - 1);
}(100))


立即执行函数时返回函数名

func.caller

打印出执行caller的那个函数

function demo() {
test();
}
function test() {
console.log(test.caller)
}
demo();


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息