当前位置: 首页 > Web前端 > HTML

了解JavaScript中的类型

时间:2023-03-28 17:41:33 HTML

JavaScript内置类型JavaScript中有8种内置类型。分为原始类型(Primitivevalues)和对象类型(objects)原始值(Primitivevalues)布尔型(Boolean)空(Null)未定义(Undefined)数字(Number)长整型(BigInt,ECMAScript2020新增)String(String)符号(Symbol,ECMAScript2015new)对象类型(Objects)可以简单理解为:newObject,newArray,newMap,newSet,newWeakMap,newWeakSet,newDate,几乎都是通过new关键字创建的东西.Typeof运算符typeof运算符的目的是检查数据类型。但是对于派生自Object的结构类型。例如,consta=newDate();typeofa//仍将返回对象。我们可以参考这张表:Null我们在本地尝试typeofnull;我们会发现返回的结果是'object'。这其实是历史遗留下来的bug。因为JavaScript最初的设计初衷是以32位为单位存储数组。这里存储的数据由类型标签(1-3位)和值组成。类型标签存储在低位。其对应的数据可以参考下表:0.但是对于Null类型,机器代码是空指针(在大多数平台上是0x00),它恰好也是0。JavaScript中的typeof方法不会过滤Null类型。因此,当我们typeofnull时,我们认为它的类型标签是0,我们得到的是'object'。类型转换将值从一种类型转换为另一种类型通常称为类型转换。它分为显式强制转换(explicitcoercion)和隐式强制转换(implicitcoercion)。显式强制转换(explicitcoercion)最常用的显示类型转换方法有四种转换成字符串String(),可用于除null和undefined之外的任何类型的数字、文本、变量或表达式toString()方法表示任何值has被转换为数值。Number()可以将字符串、布尔值和日期类型转换为数字。空字符串转为0,其他字符串转为NaNparseInt(string,radix),parseFloat(string,radix)函数解析字符串中的数字。ES5之后。radix默认为十进制。转换为对象Object()转换为BooleanBoolean()使用!!(也可以理解为隐式类型转换)隐式强制转换(implicitcoercion)隐式类型转换是指那些隐藏的强制类型转换。我们写的大部分代码都是给别人看的,可见强制转换就是为了让代码更清晰,更容易理解。隐式强制转换的目的是减少冗余,使代码更简洁。相反,它具有使代码更加晦涩的副作用。但这种副作用也是相对的。例如下面的代码:vara=10;varb=a+"";//隐式转换varb=String(a);//explicitcast如果您理解a+''的含义,那么“隐藏的副作用”对您来说并不明显。但是我们也要考虑到其他不同层次的开发者,考虑别人能不能看懂他们的代码。这些可以根据实际工作情况选择,尽量让整体代码兼顾“简洁”和“可读性”。目前我们使用的隐式强制转换分为三种:number和string之间的隐式转换number和booleanboolean的隐式转换,包括以下几种情况下的条件判断表达式if()for(..;..;中的第二个表达式。.;)while()和do..while(..)三元运算符?:逻辑运算符||&&JavaScripttypeconversiontableprimitive将value转为number,转为string,转为Booleanfalse0'false'falsetrue1'true'true00'0'false11'1'true'0'0'0'true(非空字符串类型转tobooleanistrue)'000'0'000'true'1'1'1'trueNANNAN'NAN'falseInfinity(positiveinfinity)Infinity'Infinity'true-Infinity(negativeinfinity)-Infinity'-Infinity'true''0''false'10'10'10'true'twenty'NAN'twenty'true[]0''true[10]10'10'true[10,20]NAN'10,20'true['ten']NAN'ten'truefunction(){}NAN'function(){}'true{}NAN'[objectObject]'truenull0'null'falseundefinedNAN'undefined'false