Object 对象方法

Object 对象方法

1. 对象原始转换

对象中不存在布尔转换,只有字符串和数值转换

数值转换发生在对象相减或应用数学函数时

字符串转换通常发生在 alert() 输出时

为了进行转换,JavaScript 尝试查找并调用三个对象方法:

  • obj[Symbol.toPrimitive](hint)

  • obj.toString()

  • obj.valueOf()

1-1 Symbol.toPrimitive

Symbol.toPrimitive 的内建 symbol,它被用来给转换方法命名

如果 Symbol.toPrimitive 方法存在,可以用来处理所有的转换场景

类型转换有三种变体,它们被称为 hint

  • string:对象到字符串的转换,当我们对期望一个字符串的对象执行操作时
  • number:对象到数字的转换,例如当我们进行数学运算时
  • default:当运算符不确定期望值的类型时
obj[Symbol.toPrimitive] = function(hint) {
   
  // 这里是将此对象转换为原始值的代码
  // 它必须返回一个原始值
  // hint = "string"、"number" 或 "default" 中的一个
}

let obj = {
   
	name: 'jsx',
	age: 22,
	money: true,
	[Symbol.toPrimitive](hint) {
   
		console.log(hint)
		return hint == 'string' ? `{name: '${
     this.name}'}` : this.age;
	}
}
console.log(obj + 2); // 24
console.log(obj + 'ljj'); // 22ljj
console.log(+obj); // 22

1-2 toString() & valueOf()

如果没有 Symbol.toPrimitive,那么 JavaScript 将尝试寻找 toStringvalueOf 方法,转换并不限制返回类型

  • 对于 string hinttoString,如果它不存在,则 valueOf
  • 对于其他 hintvalueOf,如果它不存在,则 toString

默认情况下,普通对象具有 toStringvalueOf 方法:

  • toString 方法返回一个字符串 [object Object]
  • valueOf 方法返回对象自身
let obj = {
   
	name: 'jsx',
	age: 22,
	money: true,
	valueOf: function() {
   
		return this.age
	},
	toString: function() {
   
		return this.name
	}
}
// toString 返回字符串
console.log(obj + 3); // 22

// valueOf 返回对象自身
console.log(`${
     obj}`); // jsx

2. 属性方法

2-1 检测属性

obj.hasOwnProperty(prop)

  • prop:要检测的属性的 String 字符串形式表示的名称,或者 Symbol

方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性,不检测原型链上继承的属性

let obj = {
   
	name: 'jsx',
	age: 22
}
console.log(obj.hasOwnProperty('name')); // true

// 在obj的原型对象中有hasOwnProperty属性
console.log(obj.hasOwnProperty('hasOwnProperty')); // false

2-2 获取属性名

Object.getOwnPropertyNames(obj)

返回一个由指定对象的所有自身属性的属性名组成数组

包括不可枚举属性但不包括 Symbol 值作为名称的属性

let obj = {
   
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值