当前位置: 首页 > news >正文

JS对象到原始值的转换

JS对象到原始值转换的复杂性 主要由于某些对象类型存在不止一种原始值的表示

对象到原始值转换的三种基本算法

在解释三种算法前需要了解toString valueOf这两个方法

toString

  • 返回对象的字符串表示
  • Array类的toString方法会将每个元素转换为字符串,再使用逗号作为分隔符拼接起来
  • Function类的toString方法将定义的函数转换为JS源代码的字符串
  • Date类型的toString方法返回一个人类友好(且JS可解析)的日期和时间字符串
  • RegExp类定义的toString方法将RegExp对象转换为一个看起来像RegExp字面量的字符串

valueOf

  • 把对象转换为代表对象原始值(如果存在这样一个原始值)
  • 对象是复合值,且多数对象不能真正通过一个原始值标识,valueOf方法默认情况只返回对象本身
  • String Number Boolean包装类定义的valueOf返回被包装的原始值
  • Array Function RegExp 继承默认方法,返回对象本身
  • Date对象返回日期的内部表示形式: 自1970年1月1日至今的毫秒数

偏字符串 (该算法返回原始值,只要可能就返回字符串)

  • 首先尝试toString方法
  • 方法有定义且返回原始值,则使用该原始值(即使这个值不是字符串)
  • 不存在或者存在但返回对象,则尝试使用valueOf方法
  • 方法存在且返回原始值,则使用该值。
  • 否则,转换失败 TypeError

偏数值 (该算法返回原始值,只要可能就返回数值)

  • 偏字符串算法类似,先尝试valueOf再尝试toString

无偏好 (该算法不倾向于任何原始值类型,而是由类定义自己的转换规则)

  • 取决于被转换对象的类
  • 如果是Date对象,则使用偏字符串算法
  • 其他类型使用偏数值算法

JS内置类型除了Date类都实现了偏数值算法;Date类实现了偏字符串算法

对象转换为布尔值

  • 所有对象都转换为true
  • 不需要使用前面的转换算法
  • 包括空数组、new Boolean(false)包装对象
Boolean({}) // true
Boolean([]) // true
Boolean(new Boolean(false)) /// true

对象转换为字符串

  • 使用偏字符串算法转换为一个原始值
  • 再将原始值转换为字符串
String({}) // '[object Object]'
String([]) // ''
String(new Date(2023)) // 'Sun Jan 01 2023 08:00:00 GMT+0800 (中国标准时间)'
String(new RegExp(/[a-z]/i)) // '/[a-z]/i'

对象转换为数值

  • 使用偏数值算法转换为一个原始值
  • 将原始值转换为数值
Number({}) // NaN
Number([]) // 0
Number([6]) // 6
Number(new Date(2023)) // 1672531200000
Number(new RegExp(/[a-z]i/)) // NaN

操作符转换特例

+操作符

  • 执行数值加法和字符串拼接
  • 如果一个操作数是对象,则使用无偏好算法将对象转换为原始值
  • 如果两个操作数都是原始值,则检查类型
  • 有一个是字符串,则将另一个转换为字符串进行拼接
  • 否则转换为数值进行相加

== != 操作符

  • 允许类型转换的宽松方式执行相等和不相等测试
  • 如果一个操作数是对象 另一个是原始值,则使用无偏好算法转换为原始值 再比较

< <= > >= 关系操作符

  • 既可比较数值也可比较字符串
  • 如果有一个操作数是对象 则使用偏数值算法将对象转换为原始值
  • 与对象到数值转换不同 这个偏数值算法返回的原始值不会再被转换为数值

相关文章:

JS对象到原始值的转换

JS对象到原始值转换的复杂性 主要由于某些对象类型存在不止一种原始值的表示 对象到原始值转换的三种基本算法 在解释三种算法前需要了解toString valueOf这两个方法 toString 返回对象的字符串表示Array类的toString方法会将每个元素转换为字符串&#xff0c;再使用逗号作为…...

深度复盘-重启 etcd 引发的异常

作者信息&#xff1a; 唐聪、王超凡&#xff0c;腾讯云原生产品中心技术专家&#xff0c;负责腾讯云大规模 TKE 集群和 etcd 控制面稳定性、性能和成本优化工作。 王子勇&#xff0c;腾讯云专家级工程师&#xff0c; 腾讯云计算产品技术服务专家团队负责人。 概况 作为当前中国…...

2023年春招热点面试题(一)------新特性

文章目录一、Spring 6.0 新特性二、Spring Boot 3.0 新特性三、JDK 系列 新特性A.**JDK8新特性&#xff08;2014年初&#xff09;&#xff08;LTS版本&#xff09;**B. **JDK9新特性&#xff08;2017年9月&#xff09;**C.**JDK10新特性&#xff08;2018年3月&#xff09;**D.*…...

工程项目管理系统源码+spring cloud 系统管理+java 系统设置+二次开发

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…...

想要精通算法和SQL的成长之路 - 接雨水

想要精通算法和SQL的成长之路 - 接雨水前言一. 接雨水前言 想要精通算法和SQL的成长之路 - 系列导航 一. 接雨水 原题链接 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a;height [0,…...

Vue3 更高效的构建工具——Vite

文章目录前言一、Vite简介1. Vite组成2.为什么选 Vite?二、Vite的优缺点vite优点vite缺点三、使用Vite创建Vue3项目1. 创建 vite 的项目2.项目的结构前言 本文讲解了构建工具 Vite&#xff0c;目前只有vue3才可以使用Vite&#xff0c;如果本文对你有所帮助请三连支持博主。 下…...

优思学院|從《狂飙》高启强爱看的《孙子兵法》到六西格玛项目管理

近期最受人瞩目的&#xff0c;无疑是电视剧《狂飙》中出类拔萃的反派高启强。而在剧中&#xff0c;指引高启强走向顶峰的&#xff0c;正是那部著名的军事经典——《孙子兵法》。 在剧中&#xff0c;高启强在一次村庄改造项目上遇到了困难&#xff0c;但他仍保持冷静&#xff0…...

如何利用状态机编程实现启保停控制(含Stateflow模型介绍)

状态机的介绍这里不再赘述,概念也很简单没有过多的复杂理论。下面我们直接给出具体实现过程。有限自动状态机详细讲解请参看下面的文章链接: PLC面向对象编程系列之有限状态机(FSM)详解_RXXW_Dor的博客-CSDN博客_有限状态机 plc实现编写PLC控制机器动作类程序时,当分支比较…...

4. sql 语句中常用命令

1. 数据表&#xff1a; 本文中所有命令&#xff0c;测试的数据表结构如下图&#xff1a; 2. 查询语句&#xff1a; 2.1 基础查询&#xff1a;select //查询单个字段&#xff1a; select 字段名 from 表名; //查询多个字段 select 字段名1,字段名2,... from 表名; //查询所…...

第三章 Opencv图像像素操作

目录1.像素1-1.确定像素位置1-2.获取指定像素的像素值1-3.修改像素的BGR值2.用numpy模块操作像素2-1.创建图像1.创建黑白图像2.创建彩色图像3.创建随机图像2-2.拼接图像1.水平拼接hstack()方法2.垂直拼接vstack()方法1.像素 1.像素是构成数字图像的最小单位。每一幅图像都是由M…...

SpringBoot集成swagger3(CD2207)(内含教学视频+源代码)

SpringBoot集成swagger3&#xff08;CD2207&#xff09;&#xff08;内含教学视频源代码&#xff09; 教学视频源代码下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87435564 目录SpringBoot集成swagger3&#xff08;CD2207&#xff09;&#…...

Go语言语言学习十三(反射的对象值)

在Go语言中反射不仅可以获取值的类型和种类&#xff0c;还可以获取值和更改值&#xff0c;使用reflect.ValueOf()获取和设置变量的值。 使用反射值包装任意值 Go语言通过reflect.ValueOf()获取的是值的反射值对象&#xff0c;书写格式如下 value : reflect.ValueOf(rawValue…...

【ESP 保姆级教程】玩转emqx数据集成篇② ——控制台输出动作(多用于测试环境调试功能)

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-10 ❤️❤️ 本篇更新记录 2023-02-10 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...

MyBatis案例 | 使用映射配置文件实现CRUD操作——添加数据

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等&#xff0c;如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址&#xff1a;&#x1f525;JavaWeb Java入门篇&#xff1a; &#x1f525;Java基础学习篇 Java进阶学习篇&…...

2023年,什么样的CRM,才是您最需要的?

春节假期刚刚结束&#xff0c;当大家还沉浸在新春佳节的喜悦中时&#xff0c;很多地方已经争先恐后地奋力开跑了。近日&#xff0c;全国各地方政府相继出台并发布了2023年数字化转型规划&#xff0c;纷纷结合自身的区位特色和优势资源&#xff0c;明确2023年乃至此后数年的数字…...

【C语言】编程初学者入门训练(6)

文章目录51. 计算一元二次方程52. 获取月份天数53. 简单计算器54. 线段图案55. 正方形图案56. 直角三角形图案57. 翻转直角三角形图案58. 带空格直角三角形图案59. 金字塔图案60. 翻转金字塔图案51. 计算一元二次方程 问题描述&#xff1a;从键盘输入a, b, c的值&#xff0c;编…...

Java笔记-异常相关

一、异常概述与异常体系结构 Error:Java虚拟机无法解决的严重问题&#xff1a; JVM系统内部错误&#xff0c;资源耗尽&#xff0c;如&#xff1a;StackOverflow \OOM堆栈溢出 处理办法&#xff1a;只能修改代码&#xff0c;不能编写处理异常的代码 Exception:可以处理的异常 &…...

pytest-xdist测试用例并发

官方文档&#xff1a;pytest-xdist初次使用参考&#xff1a;Python测试框架pytest&#xff08;22&#xff09;插件 - pytest-xdist&#xff08;分布式执行&#xff09;pytest测试框架系列 - Pytest pytest-xdist 分布式、多进程并发执行用例你会用吗&#xff1f;Pytest-xdist并…...

大数据---Hadoop安装jdk简易版

编写自动安装jdk的shell脚本 完整流程: 大数据—Hadoop安装教程&#xff08;一&#xff09; 文章目录编写自动安装jdk的shell脚本上传压缩包编写shell脚本vim autoinstall.sh解压更名添加环境运行上传压缩包 在opt目录下创建连个目录install和soft 将压缩包上传到install目录…...

【0基础学爬虫】爬虫基础之爬虫的基本介绍

大数据时代&#xff0c;各行各业对数据采集的需求日益增多&#xff0c;网络爬虫的运用也更为广泛&#xff0c;越来越多的人开始学习网络爬虫这项技术&#xff0c;K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章&#xff0c;为实现从易到难全方位覆盖&#xff0c;特设【0基础学…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...