一.面向对象相关的属性和方法的介绍。

    1.toString() :系统对象下都是自带的 , 自己写的对象都是通过原型链继承Object的,可以把对象转成字符串,进制转换或者类型的判断。

    1.1.对象转字符串。

    1. let arr = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
    2. console.log(arr.toString().split(',').map(v => +v));

    1.2.进制转换

    1. let num = 10;
    2. console.log(num.toString(2)); //将num转换成二进制--1010
    3. console.log(num.toString(8)); //将num转换成八进制--12
    4. console.log(num.toString(16)); //将num转换成十六进制--a

    1.3.类型的判断 - js里面最优秀的类型判断的方法。

    1. console.log(typeof null);
    2. console.log(typeof [1, 2, 3]);
    3. console.log(typeof {
    4. a: 1
    5. });
    6. console.log(typeof new Date());
    1. // 上面的四个全部返回object,不容易区分
    2. // 让Object.prototype里面的this指向括号里面的值,人为重构发现的规律。
    3. // 后面输出的字符串可以当作判断条件。
    4. console.log(Object.prototype.toString.call(100)); //[object Number]
    5. console.log(Object.prototype.toString.call('hello')); //[object String]
    6. console.log(Object.prototype.toString.call(true)); //[object Boolean]
    7. console.log(Object.prototype.toString.call(null)); //[object Null]
    8. console.log(Object.prototype.toString.call(undefined)); //[object Undefined]
    9. console.log(Object.prototype.toString.call([])); //[object Array]
    10. console.log(Object.prototype.toString.call({})); //[object Object]
    11. console.log(Object.prototype.toString.call(/\d/)); //[object RegExp]
    12. console.log(Object.prototype.toString.call(new Date())); //[object Date]
    13. console.log(Object.prototype.toString.call(Symbol())); //[object Symbol]
    14. console.log(Object.prototype.toString.call(BigInt(100))); //[object BigInt]

    2.constructor:输出实例对象的构造函数。

    1. function Person(name, age, sex) { //构造函数
    2. this.name = name;
    3. this.age = age;
    4. this.sex = sex;
    5. }
    6. let p1 = new Person();
    7. console.log(p1.constructor); //输出构造函数体
    8. console.log(Person.prototype.constructor); //输出构造函数体
    9. let arr = [];
    10. console.log(arr.constructor);
    11. console.log(arr.constructor.toString().includes('Array')); //也可以勉强判断数据类型,不方便

    3.instanceof:判断一个对象是否是一个构造函数(类)的实例。

    1. function Person(name, age, sex) { //构造函数
    2. this.name = name;
    3. this.age = age;
    4. this.sex = sex;
    5. }
    6. let p1 = new Person();
    7. console.log(p1 instanceof Person); //true
    8. console.log(p1 instanceof Object); //true 对象从属于object
    9. console.log(Person instanceof Function); //true Person是构造函数,属于Function类。
    10. console.log(Person instanceof Object); //true 函数属于对象
    11. console.log(p1 instanceof Function); //false

    4.hasOwnProperty() : 看是不是实例对象自身下面的属性, 只在属性存在于实例中时才返回 true,不会继承原型链上面的。

    解读:看当前的属性是不是构造函数里面的,不包括原型链上的。

    1. function Person() { //构造函数
    2. this.name = 'zhangsan';
    3. }
    4. Person.prototype.age = 18;
    5. Object.prototype.sex = '男';
    6. let p1 = new Person();
    7. console.log(p1.hasOwnProperty('name')); //true
    8. console.log(p1.hasOwnProperty('age')); //false
    9. console.log(p1.hasOwnProperty('sex')); //false

    5.in操作符,看是不是实例对象自身下面的属性,包括原型链上的。

    1. console.log('name' in p1); //true
    2. console.log('age' in p1); //true
    3. console.log('sex' in p1); //true
    4. console.log('hehe' in p1); //false