一.面向对象相关的属性和方法的介绍。
1.toString() :系统对象下都是自带的 , 自己写的对象都是通过原型链继承Object的,可以把对象转成字符串,进制转换或者类型的判断。
1.1.对象转字符串。
let arr = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];console.log(arr.toString().split(',').map(v => +v));
1.2.进制转换
let num = 10;console.log(num.toString(2)); //将num转换成二进制--1010console.log(num.toString(8)); //将num转换成八进制--12console.log(num.toString(16)); //将num转换成十六进制--a
1.3.类型的判断 - js里面最优秀的类型判断的方法。
console.log(typeof null);console.log(typeof [1, 2, 3]);console.log(typeof {a: 1});console.log(typeof new Date());
// 上面的四个全部返回object,不容易区分// 让Object.prototype里面的this指向括号里面的值,人为重构发现的规律。// 后面输出的字符串可以当作判断条件。console.log(Object.prototype.toString.call(100)); //[object Number]console.log(Object.prototype.toString.call('hello')); //[object String]console.log(Object.prototype.toString.call(true)); //[object Boolean]console.log(Object.prototype.toString.call(null)); //[object Null]console.log(Object.prototype.toString.call(undefined)); //[object Undefined]console.log(Object.prototype.toString.call([])); //[object Array]console.log(Object.prototype.toString.call({})); //[object Object]console.log(Object.prototype.toString.call(/\d/)); //[object RegExp]console.log(Object.prototype.toString.call(new Date())); //[object Date]console.log(Object.prototype.toString.call(Symbol())); //[object Symbol]console.log(Object.prototype.toString.call(BigInt(100))); //[object BigInt]
2.constructor:输出实例对象的构造函数。
function Person(name, age, sex) { //构造函数this.name = name;this.age = age;this.sex = sex;}let p1 = new Person();console.log(p1.constructor); //输出构造函数体console.log(Person.prototype.constructor); //输出构造函数体let arr = [];console.log(arr.constructor);console.log(arr.constructor.toString().includes('Array')); //也可以勉强判断数据类型,不方便
3.instanceof:判断一个对象是否是一个构造函数(类)的实例。
function Person(name, age, sex) { //构造函数this.name = name;this.age = age;this.sex = sex;}let p1 = new Person();console.log(p1 instanceof Person); //trueconsole.log(p1 instanceof Object); //true 对象从属于objectconsole.log(Person instanceof Function); //true Person是构造函数,属于Function类。console.log(Person instanceof Object); //true 函数属于对象console.log(p1 instanceof Function); //false
4.hasOwnProperty() : 看是不是实例对象自身下面的属性, 只在属性存在于实例中时才返回 true,不会继承原型链上面的。
解读:看当前的属性是不是构造函数里面的,不包括原型链上的。
function Person() { //构造函数this.name = 'zhangsan';}Person.prototype.age = 18;Object.prototype.sex = '男';let p1 = new Person();console.log(p1.hasOwnProperty('name')); //trueconsole.log(p1.hasOwnProperty('age')); //falseconsole.log(p1.hasOwnProperty('sex')); //false
5.in操作符,看是不是实例对象自身下面的属性,包括原型链上的。
console.log('name' in p1); //trueconsole.log('age' in p1); //trueconsole.log('sex' in p1); //trueconsole.log('hehe' in p1); //false
