js 杂七杂八小知识(二 - 对象篇)

object

权威指南:属性名可以包含空字符串在内的任意字符串,但是对象不能存在2个相同的属性。

创建对象的三种方式:

1、对象直接量

var obj = {};

2、关键字new

var obj = new Object()

3、Object.create( ) 函数来创建

使用Object.create( ) 来创建对象,第一个参数是创建出对象的原型,所以参数一必须要传递!

通过Object.create( ) 来创建的对象,它继承了参数对象的属性,并且新创建的对象修改其属性,参数对象不会受影响!!!

let obj = Object.create({name:'lxc'})

对象的访问

1、在对象中,去访问一个不存在的属性,结果为undefined;在此基础上如果在去访问一个属性,那么会报错,因为undefined、null值都没有属性:

不能读取undefined的length属性

检测属性

检查一个属性是否存在某个对象中:

1、in运算符:左侧是属性名(字符串),右侧是 对象。如果对象的自由属性或者继承属性包含这个属性,则返回true。

下边toString是继承的属性,所以返回true

2、hasOwnProperty:查找给定的参数属性是否是对象的自有属性。

3、propertyIsEnumerable : 它是hasOwnProperty的增强版,只有检查到是自身属性 且 这个属性的可枚举性为true 时,它才返回true。

下边之所以为false,因为toString是不可枚举的

 

4、还有一种方法:  !== undefined  检查一个属性是否为undefined

之所以用绝对不等于,因为如果使用 != 值为null、undefined的时候是一样的,都会返回true ,因为 null == undefined 返回true。。。

let a = {x:1};
console.log(a.x !== undefined) //true

 

对象原型:

1、原型

使用对象直接量创建的对象,Object.prototype 作为它的原型;

使用new 创建的对象 ,使用构造函数的prototype作为它们的原型;

使用Object.create( ) 第一个参数(也可以为null)作为它们的原型。

 

2、查看原型的方法:

ES3 :  o.constructor.prototype   o是new 实例化的对象

ES5 : Object.getPropertyOf( param ) 将对象作为参数传入。

 

3、查看某对象是否是另一对象的原型

p.isPrototypeOf( o )   p是否是o的原型

var a = {name:'lxc'}
var r = Object.create(a) 

console.log(a.isPrototypeOf(r)) //true
console.log(Object.prototype.isPrototypeOf(r)) //true

 

序列化对象

使用JSON.stringify和JSON.parse 可对一个对象进行深拷贝

var a = {name:'lxc'}
var r = JSON.stringify(a)
var newA = JSON.parse(r)
console.log(a === newA) //false

toString()方法

该方法没有参数,在需要一个对象转换为字符串的时候,js会调用此方法。

权威指南:

一个对象转化为字符串,会调用此方法,如果返回的是一个原始值,js会将这个值转化为字符串(前提:如果这个原始值不是一个字符串)。

valueOf()方法

与toString()方法类似,js将对象转化为某种原始值的时候,调用它。尤其是转化为数字的时候。

权威指南:

在对象转化为数字的过程与转字符串类似,只不过先调用valueOf( ) 方法,如果返回一个原始值,js会把它转化为数字;不过大多数情况下,由于对象是一个复合值,所以多数对象无法真正表示一个原始值,因此默认的valueOf( ) 方法会简单的返回对象本身,而不是返回一个原始值。

如果调用调用valueOf( ) 方法返回的是对象本身,还会继续调用toString( ) 方法,返回一个原始值。

下边代码,对象a与1相加,首先a会调用valueOf()方法,如果没法转化为原始值,会调用toString( ) 方法转为原始值,再去与1相加。。。

var a = {name:'lxc'}
console.log(a +1) // [object Object]1

 

toLocaleString()方法

权威指南:

toLocaleString()方法返回的是表示一个对象的本地化字符串。Object中默认的toLcaleString()方法并不做任何本地化处理,它仅调用toString( )方法,并返回对应的值。但是Date和Number类对 toLcaleString()做定制,可以用它对数字、日期和时间做本地化的转换。

var a = new Date()
console.log(a.toLocaleString()) // 2019/10/31 上午9:06:32
console.log(a.toString()) // Thu Oct 31 2019 09:06:55 GMT+0800 (中国标准时间)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值