详解JavaScript对象转原始值

yizhihongxing

回答:

1. JavaScript对象转原始值

在JavaScript中,当一个对象被转换成原始类型时,会调用该对象的valueOf()toString()方法。如果这两个方法都不存在或没有返回原始值,则会抛出TypeError异常。

1.1 valueOf()方法

对于大多数JavaScript对象,valueOf()方法会返回对象本身。但是对于包装对象,如StringNumberBooleanvalueOf()方法会返回包装对象所代表的原始值。

例如:

var num = new Number(42);
console.log(num.valueOf()); // 42

1.2 toString()方法

toString()方法会将一个对象转换成字符串形式。大多数JavaScript对象的toString()方法都会返回[object Object],这对于调试是没有什么用处的。因此,我们需要覆盖这个默认行为,来让它返回具体的、有意义的字符串。

例如:

var person = {
  name: '张三',
  age: 20,
  toString: function() {
    return this.name + ', ' + this.age + '岁';
  }
};
console.log(person.toString()); // "张三, 20岁"

2. 示例说明

示例一

假设我们有一个Person类,我们要将它转换成字符串形式,首先可以尝试使用toString()方法:

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  toString() {
    return this.name + ', ' + this.age + '岁';
  }
}
const person = new Person('张三', 20);
console.log(person.toString()); // "张三, 20岁"

如果我们将该对象进行隐式类型转换,比如console.log输出时,会自动调用toString()方法,得到如下结果:

console.log(person); // Person { name: '张三', age: 20 }

可以看到,输出的结果是对象的类型和属性,如果想输出具体内容,需要将toString()方法覆盖。

示例二

假设我们有一个Product类,它代表一个商品,我们想获取它的价格。可以使用valueOf()方法来获取它的价格:

class Product {
  constructor(name, price) {
    this.name = name;
    this.price = price;
  }
  valueOf() {
    return this.price;
  }
}
const product = new Product('苹果', 5.6);
console.log(product.valueOf()); // 5.6

如果我们将该对象进行隐式类型转换,比如使用Number()进行显式类型转换,会自动调用valueOf()方法,得到如下结果:

console.log(Number(product)); // 5.6

可以看到,输出的结果是商品的价格。如果想获取其它属性,需要在类中覆盖valueOf()方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解JavaScript对象转原始值 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • three.js绘制地球、飞机与轨迹的效果示例

    下面是关于”three.js绘制地球、飞机与轨迹的效果示例”的完整攻略。 简介 three.js是一款基于WebGL的JavaScript 3D渲染库,可以用来制作3D场景、动画等效果。在制作3D场景中,绘制地球、飞机与轨迹是比较常见的需求。本文将讲述如何使用three.js实现绘制地球、飞机与轨迹效果。 步骤 1. 准备工作 首先,我们需要引入three.…

    JavaScript 2023年6月11日
    00
  • 让你5分钟掌握9个JavaScript小技巧

    下面我就来详细讲解“让你5分钟掌握9个JavaScript小技巧”的完整攻略。 1. 变量值交换 有一种交换变量值的另类写法,可以用解构赋值完成: let a = 1; let b = 2; [a, b] = [b, a]; console.log(a) //输出2 console.log(b) //输出1 2. 使用扩展运算符复制数组 扩展运算符(spre…

    JavaScript 2023年5月17日
    00
  • javascript Number 与 Math对象的介绍

    针对“JavaScript Number 与 Math 对象的介绍”的完整攻略,以下为详细说明: JavaScript Number 介绍 JavaScript Number 对象用于在代码中处理数字。JavaScript 中的数字可以是,十进制,二进制,八进制,十六进制和科学计数法。 语法 var x = 123; // 十进制 var x = 0xff;…

    JavaScript 2023年5月28日
    00
  • 浅析script标签中的defer与async属性

    当我们在HTML文档中使用<script>标签引入JavaScript文件时,我们可以为这个标签添加两个重要的属性:defer和async。这两个属性都是为了优化JavaScript的加载和执行,但它们有一些不同之处。下面我们来分别对这两个属性进行详细的解析。 Defer属性 defer属性告诉浏览器,这个脚本将被延迟到页面加载完成后再执行。这意…

    JavaScript 2023年6月10日
    00
  • java NIO 详解

    Java NIO 详解 Java NIO(New IO)是一种基于缓冲区、非阻塞IO的API集,主要用于替代传统的Java IO API。它可以更高效地处理IO数据,具有更好的扩展性和灵活性,尤其适用于处理大量连接和请求的场景。 在本文中,我们将从以下几个方面对Java NIO进行详细讲解: 缓冲区(Buffer)及其操作 通道(Channel)及其操作 选…

    JavaScript 2023年5月28日
    00
  • JavaScript 严格模式(use strict)用法实例分析

    我们来详细讲解一下“JavaScript 严格模式(use strict)用法实例分析”的完整攻略。 什么是严格模式? 严格模式是一种 ECMAScript 5 引入的特性,它可以让你的 JavaScript 代码更加安全、更加规范。启用严格模式后,一些不安全的语法和错误会在编译时被检测出来,并抛出异常。 如何启用严格模式? 我们可以在 JavaScript…

    JavaScript 2023年5月18日
    00
  • JS实现计算小于非负数n的素数的数量算法示例

    下面是JS实现计算小于非负数n的素数的数量算法示例的攻略: 算法背景 计算小于非负数n的素数的数量是基础的数学问题之一。素数指的是只能被1和自身整除的正整数。在计算中,我们需要找到小于n的所有素数,并统计它们的数量。这是一个经典的算法问题,也是很多编程面试中被提问的问题。 算法原理 本算法使用了朴素的质数判定方法,先将数组中所有数初始化为true,然后从2开…

    JavaScript 2023年5月28日
    00
  • js中通过getElementsByName访问name集合对象的方法

    获取name集合对象是DOM中的常见操作之一,使用getElementsByName方法可以获取到相应名字的元素节点集合。下面为大家提供选定属性值的两条示例说明: 语法说明 getElementsByName方法通过指定元素的name特定属性来获取文档中具有相同name属性值的元素集合。其基本语法如下: var elements = document.get…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部