valueOf && toString

本文探讨了JavaScript中valueOf与toString方法的使用及其优先级差异。通过实例展示了当执行加法操作时,valueOf方法会先于toString被调用,除非没有valueOf方法可用。
function A(){
	this.a = {


		toString:function(){
			return "5";

		},
		valueOf:function(){
			return 1;

		}


	}

}

var a = new A();
a.a + "1" //为"11"



function A(){
	this.a = {


		toString:function(){
			return "5";

		}

	}

}
var a = new A();
a.a + "1" //为"51"



function A(){
	this.a = {


		

	}

}
var a = new A();
a.a + "1" //  "[object Object]1"



//valueOf 优先级大一些哟!

### JavaScript `valueOf` 和 `toString` 方法的区别及用法 #### 定义与作用 在 JavaScript 中,对象到原始值的转换通过两个特殊的方法实现:`toString()` 和 `valueOf()`. 这些方法允许开发者定义当对象被当作原始值处理时的行为[^1]. - **`toString()`**: 此方法返回表示该对象的一个字符串。通常用于提供关于对象类型的描述性信息。 - **`valueOf()`**: 返回对象对应的原始值。如果对象本身代表某种数值,则此方法应返回相应的数值形式;对于其他情况,默认行为取决于具体对象类型. #### 使用场景对比 ##### `toString` 主要用于获取对象的字符串表示形式: ```javascript let obj = { name: "Alice", age: 25 }; console.log(obj.toString()); // "[object Object]" ``` 可以自定义类中的 `toString` 方法来改变默认输出: ```javascript class Person { constructor(name, age) { this.name = name; this.age = age; } toString() { return `${this.name}, ${this.age}`; } } const person = new Person('Bob', 30); console.log(person.toString()); // Bob, 30 ``` ##### `valueOf` 用来获得对象所代表的实际数据值,在某些运算上下文中自动调用(比如算术操作符)。对于内置对象来说,它会尝试返回最接近于原生类型的值: ```javascript // 对象实例化 var numObj = new Number(42); // 调用 valueOf 获取内部存储的真实数字 console.log(numObj.valueOf()); // 42 ``` 同样也可以重写 `valueOf` 来适应特定需求: ```javascript class Point { constructor(x, y) { this.x = x; this.y = y; } valueOf() { return Math.sqrt(this.x * this.x + this.y * this.y); } } const point = new Point(3, 4); console.log(point.valueOf()); // 5 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值