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

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

知识点

  • toString方法
    这里写图片描述
    打印出来的是”成哥很帅”, 证明出来数组打印时调用出来的是toString方法
  • 判断数组和对象
1
2
3
4
5
6
7
8
9
10
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方法

  • 判断全数据类型函数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    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
    例: 遍历对象里面的属性
1
2
3
4
5
6
7
8
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

遍历自身属性, 继承的不显示

1
2
3
4
5
6
7
8
9
10
11
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

1
2
3
4
5
6
var obj = {
name : 'acx',
age : 12,
sex : 'female'
}
console.log('name' in obj);

注意: 属性名称为字符串

3. instanceof

看看前面的对象是不是后面构造出来的, 是的话返回true

1
2
3
4
5
function Person() {
}
var person = new Person;
person instanceof Person;
  • a instanceof b
    判断a的原型链上, 有没有b的原型

arguments//类数组

  • arguments.callee
    指向函数的本身
    这里写图片描述
    这里写图片描述

用处:

1
2
3
4
5
6
var num = (function (n){
if(n == 1) {
return 1;
}
return n * arguments.callee(n - 1);
}(100))

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

  • func.caller
    打印出执行caller的那个函数
1
2
3
4
5
6
7
function demo() {
test();
}
function test() {
console.log(test.caller)
}
demo();

这里写图片描述

越来越多的平台(微信公众平台,新浪微博,简书,百度打赏等)支持打赏功能,付费阅读时代越来越近,特此增加了打赏功能,支持微信打赏和支付宝打赏。坚持原创技术分享,您的支持将鼓励我继续创作!