聊聊JS中的类型转换机制

如题所述

第1个回答  2024-09-04
介绍

我们都知道JS中有六种简单数据类型:undefined、null、string、number、boolean、symbol、object(引用类型)。

我们在声明的时候只有一种数据类型,在运行的时候才会确定变量的当前类型,如果运算时候的类型和预期不符合,就会触发类型转换机制。

常见的类型转换有:显式转换、隐式转换。

显示转换

显式转换就是我们俗称的强制转换,常见的方法有:

Number()

parselnt()

String()

Boolean()

Number()

是强制把任意类型的值转换为数值,规则如下:

undefined——NaN

Null——0

true——1

false——0

Symbol——ThrowaTypeErrorexception

Object——NaN

String——NaN

特殊情况:

//在空字符串的时候是转为0的Number('');//0Number('dswe3');//NaN//对象:通常转换成NaN(除了只包含单个数值的数组)Number({a:1})//NaNNumber([1,2,3])//NaNNumber([5])//5

parselnt()

相对于Number转换时只要遇到一个字符无法转换为数值,整个字符串就会被转换为NaN,parselnt函数会逐个解析,遇到不能转换的字符就停止解析,例如:

parselnt('67djj88');//67String()

可以将任意类型的值转化成字符串,规则如下:

Undefined——'Undefined'

Boolean——'true'或者'false'

Number——对应数字的字符串

String——String

Symbol——ThrowaTypeErrorexception

Object——'[objectObject]'

特殊情况:

String({r:1})//"[objectObject]"String([1,2,3])//"1,2,3"Boolean()

可以将任意类型的值转为布尔值,规则如下:

可以转换为true的:

true、非空字符串、非零数值、任意对象、N/A

可以转换为false的:

false、空字符串、0、NaN、null、undefined

示例:

Boolean(undefined);//falseBoolean(null);//falseBoolean(0);//falseBoolean(NaN);//falseBoolean('');//falseBoolean({});//trueBoolean([]);//trueBoolean(newBoolean(false));//true隐式转换

基本上隐式转换时在两种情况下发生的:

比较运算(==、!=、>、<)、if、while需要布尔值地方

算术运算(+、-、*、/、%)

自动转换为布尔值

除了下面几种会被转化成false,其他都换被转化成true

undefined

null

false

+0

-0

NaN

""

自动转换成字符串

遇到预期为字符串的地方,就会将非字符串的值自动转为字符串。

先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串:

'1'+1//'11''1'+true//"1true"'1'+false//"1false"'1'+{}//"1[objectObject]"'1'+[]//"1"'1'+function(){}//"1function(){}"'1'+undefined//"1undefined"'1'+null//"1null"自动转换成数值

除了+有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值

'5'-'2'//3'5'*'2'//10true-1//0false-1//-1'1'-1//0'5'*[]//0false/'5'//0'abc'-1//NaNnull+1//1undefined+1//NaN

logo设计

创造品牌价值

¥500元起

APP开发

量身定制,源码交付

¥2000元起

商标注册

一个好品牌从商标开始

¥1480元起

公司注册

注册公司全程代办

¥0元起

    官方电话官方服务
      官方网站八戒财税知识产权八戒服务商企业需求数字市场

聊聊JS中的类型转换机制
自动转换成字符串遇到预期为字符串的地方,就会将非字符串的值自动转为字符串。先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串:'1'+1\/\/'11''1'+true\/\/"1true"'1'+false\/\/"1false"'1'+{}\/\/"1[objectObject]"'1'+[]\/\/"1"'1'+function(){}\/\/"1function(){}"'...

JS中 == 与 === 的区别?
今天聊聊js中 == 与 === 的区别?1)、"==="叫做严格运算符,"=="叫做相等运算符。2)、"=="表示只要值相等即可为真,而"==="则要求不仅值相等,而且也要求类型相同。

聊聊Node.js 的 Stream 和 Buffer(含highWaterMark、背压、宽字符乱码问...
本文通过对比使用 fs.readFile 和 fs.createReadStream 读取大文件时内存使用情况,阐述了 Node.js 需要引入 Buffer 和 Stream 的原因。Stream 实现了数据的按需读取,避免了内存激增问题,使得在处理大文件时更为高效。Buffer 是二进制数据的抽象类型,Stream 则是对输入输出设备的抽象,两者相互配合,实...

最全总结!聊聊 Python 调用 JS 的几种方式
方法二:js2py,一个纯Python实现的JS解释器。可以将JS代码转换为Python代码,完全脱离JS环境。安装依赖库后,通过EvalJs()方法生成上下文对象,执行JS脚本,转换为Python代码,利用上下文调用JS方法,制定输入参数。注意,对于复杂的混淆代码,转换过程可能会报错。更多信息可查看github.com\/PiotrDabkows......

JS基础系列-聊聊this
1、作为函数调用时 简单的例子如下:在浏览器时执行该代码时,打印出来的都是window对象。因为作为函数调用时,默认是被认为在全局对象中调用该函数(nodejs环境中是global对象) 注:不是在当前函数所处的作用域对象 有一点需要注意的是, 箭头函数 (我们等等再特殊讲下)2、作为对象方法调用时 简单的...

聊聊JS 中的 Object.create
proto : 必须,表示新建对象的原型对象。 即该参数会被赋值到目标对象(即新对象,或说是最后返回的对象)的原型上。 该参数可以是null, 对象, 函数的 prototype 属性 注意:创建空的对象时需传null , 否则会抛出 TypeError 异常 propertiesObject : 可选,添加到新创建对象的可枚举...

聊聊QianKun JS 沙箱的那些事
沙箱,即 SandBox,是一种安全机制,通过创建独立运行环境,限制不可信程序对系统的影响。沙箱主要分为两种模式:一是隔离运行,防止错误或恶意代码影响外部环境;二是为了确保程序正常,通过隔离避免问题传播。在开发中,沙箱常用于处理像数据安全、异常处理和代码隔离等场景。在实现 JS 沙箱时,关键点有两...

浅谈JS中 reduce() 的用法
过去有很长一段时间,我一直很难理解 reduce() 这个方法的具体用法,平时也很少用到它。事实上,如果你能真正了解它的话,其实在很多地方我们都可以用得上,那么今天我们就来简单聊聊JS中 reduce() 的用法。其中, arr 表示原数组; prev 表示上一次调用回调时的返回值,或者初始值 init...

在Nodejs或浏览器运行ESM代码
第一种,package.json中填写type:"modules",表明模块的类型。此后,直接运行nodeindex.js即可。\/\/pakage.json{..."type":"modules"}第二种,则是将文件名改成.mjs,标明该文件是esm代码。这两种方式最大的区别则是模块作用域。前者是包的作用域,它的声明是以package为维度。后者则是以文件为...

浏览器渲染之回流重绘
1.JS\/CSS>样式>布局>绘制>合成 如果修改元素的layout属性,也就是触发了回流。例如改变元素的宽度、高度等,那么浏览器会触发重新布局,解析之后的一系列子阶段,这个过程就叫回流。回流需要更新完整的渲染流水线,所以开销也是最大的。 2.JS\/CSS>样式>绘制>合成 如果修改了背景图片、文字颜色或阴影等不会影响页面布局...

相似回答
大家正在搜