一 、 熟悉js的同学都应该知道Object对象、在js中一切皆对象、一切的对象都继承自Object。
Object()本身就是一个函数。它既可以当做工具函数来使用,也可以当做构造函数。
- 工具函数
在作为工具函数的时候它可以将任意值转化为对象。分为2种情况基本数据类型和复杂数据类型。
在基本数据类型中我们可以看出:字符串、数字、布尔值、都转化成了对应的包装类型、而null和undefined都是空对象。
var a=Object()
var x=Object(1)
var y=Object("52")
var z=Object(true)
var m=Object(null)
var l=Object(undefined)
console.log(a);//{}
console.log((x)); //Number{1}
console.log(x instanceof Object);//object
console.log(Object(y)); //String{"2"}
console.log(Object(z)); //Boolean{true}
console.log(Object(m));//{}
console.log(Object(l));//{}
复杂数据类型:
对于数组、对象、以及函数、Object工具函数会返回其本身。不做处理。
var b = { a: 1 };
var a = Object(b);
var x = Object([555, 666]);
var y = Object(() => {});
console.log(b === a); //true
console.log(a); //{a:1 }
console.log(x); //[555,666]
console.log(x instanceof Object); //true
console.log(Object(y)); //()=>{}
利用Object的特性可以判断声明的变量是不是一个对象。
//判断变量是否为对象
var x = true;
var y = 1;
var m = { a: "1" };
var z = [1, 2, 3];
function isObject(value) {
return value === Object(value);
}
console.log( isObject(x)); //false
console.log( isObject(y)); //false
console.log( isObject(m)); //true
console.log(isObject(z)); //true
- 构造函数
Object当做构造函数我们都知道构造函数前面应该加上关键字new 、在作为构造函数它是生成了一个对象。
作为构造函数它的使用方法和工具函数差不多,如果为基本数据类型就返回它的包装类型, 复杂 数据类型就返回它本身。其次作为工具函数来说:它的作用是将改值转化为对象,而作为构造 函数来说它是返回了一个新的对象。
var m={a:"4"}
var n=4
var z=new Object(4)
var x=new Object(m)
console.log(z);//Number{4}
console.log(x===m); //true
-
Object 的实例方法:所谓实例方法指的就是在原型对象的方法,后代实例可以访问到的方法。
我们可以看到在原型上的一些方法:
Object 原型对象的方法主要有6个:valueOf、toString、toLocalString、propertyIsEnumerable、
isPrototypeOf、hasOwnProperty.
1.valueOf:主要作用为返回返回一个对象本身。或者返回它的原始值。
var x={a:1}
console.log(x.valueOf()); //{a:1}
这里发生了隐式转换,可以看我写的js数据类型转化中的坑那篇文章。
console.log(1+x);//"1[object,object]"
2.toString:返回一个对象的字符串形式、一般返回类型字符串。
var x={a:1}
console.log(x.toString()); //[object,object] //返回对象的类型字符串
console.log(1+x);//"1[object,object]"
利用toString这个特性我们可以检查变量值的数据类型:
var a=1
var b="3"
var c=true
var d=null
var l=undefined
var x={a:1}
var z=[1,2,3]
var m=()=>{}
console.log(Object.prototype.toString.call(x)); //[object,Object]
console.log(Object.prototype.toString.call(b)); //[object,String]
console.log(Object.prototype.toString.call(c)); //[object,Boolean]
console.log(Object.prototype.toString.call(d)); //[object,Null]
console.log(Object.prototype.toString.call(l)); //[object,Undefined]
console.log(Object.prototype.toString.call(m)); //[object,Function]
- toLocalString:也是返回一个值的字符串形式
- hasOwnProperty: 主要检查实例对象有没有某一个属性。
var z={a:1}
z.__proto__.b=5
console.log(z.__proto__);
console.log(z.hasOwnProperty('a'));//true
console.log(z.hasOwnProperty('b'));//false //检测不了原型对象的属性
二、Object函数的静态方法:所谓静态方法指的就是自身的方法、实例是无法访问的。
Object.keys() Object.values() Object.entires()
var z={a:1,b:4}
z.__proto__.c=5
console.log(Object.keys(z)); //["a","b"]
console.log(Object.values(z));//[1,4]
console.log(Object.entries(z));[["a",1],["b",4]]
这里主要介绍这三个方法,其他方法可以自行查看。
三、
js中一切皆对象、Object作为所有对象的祖先、它即可作为工具函数也可作为构造函数、
它在原型对象的方法被子类可以继承使用,它自身的静态方法只能通过调用自身来使用。