丨javascript类型有哪些你不知道细节_第1页
丨javascript类型有哪些你不知道细节_第2页
丨javascript类型有哪些你不知道细节_第3页
丨javascript类型有哪些你不知道细节_第4页
丨javascript类型有哪些你不知道细节_第5页
已阅读5页,还剩18页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

于7个类型之一。从变量、参数、返回值到表达式中间结果,任何JavaScript代码运行过程中产生的数据,都具有运行时类型。JavaScript语言的每一个值都属于某一种数据类型。JavaScript语言规定了7种语言类准,这7种语言类型是:除了ES6中新加入的Symbol类型,剩下6种类型都是我们日常开发中的了,void0undefined?现在我们就分别Undefinedundefined。任何变量在赋值前是Undefined类型、值为undefined,一般我们可以用全局变量undefined(就是名为但是呢,因为JavaScript的代码undefined是一个变量,而并非是一个关键字,这是JavaScript语言公认的设计之一,所以,我们为了避免无意中被篡改,我建议使用void0来获取undefined值。Undefined跟null有一定的表意差别,null表示的是:“定义了但是为空”。所以,在实际编程时,我们一般不会把变量赋值为undefined,这样可以保证所有值为undefined的Null类型也只有一个值,就是null,它的语义表示空值,与undefined不同,null是JavaScriptnull关键字来获取nullBoolean类型有两个值,true和false,它用于表示逻辑意义上的真和假,同样有关键字true和false来表示两个值。这个类型很简单,我就不做过多介绍了。String用于表示文本数据。String有最大长度是2^53-1,这在一般开发中都是够用的,因为String的意义并非“字符串”,而是字符串的UTF16编码,我们字符串的操作charAt、charCodeAt、lengthUTF16Note:现行的字符集国际标准,字符是以Unicode的方式表示的,每一个Unicode的码点表示一个字符,理论上,Unicode的范围是无限的。UTF是Unicode的编码方式,规定了码点在计算机中的表示方法,常见的有UTF16和UTF8。Unicode的码点通常用U+???来表示,其中???是十六进制的码点值。0-65536(U -U+FFFF)的码点被称为基本字符区域JavaScript中的字符串是无法变更的,一旦字符串构造出来,无法用任何方式改变字JavaScript字符串把每个UTF16单元当作一个字符来处理,所以处理非BMP(超出 -U+FFFF范围)的字符时,你应该格外。JavaScript这个设计继承自Java,标准中是这样解释的,这样设计是为了“性能和尽可能实现起来简单”。因为现实中很少用到BMP之外的字符。NumberNumberJavaScript中的Number类型 27(即2^64-2^53+3)个值JavaScriptNumberIEEE754-2008JavaScript为了表达几个额外的语言场景(比如不让除以0出错,而引入了无穷大的概NaN,占用了9007199254740990,这原本是符合IEEE规则的数字;Infinity,另外,值得注意的是,JavaScript中有+0和-0,在加法类运算中它们没有区别,但是除法的场合则需要特别留意区分,“忘记检测除以-0,而得到负无穷大”的情况经常会导致错误,而区分+0和-0的方式,正是检测1/x是Infinity还是-Infinity。所以Number==(===)段著名的代码,这也正是我们第三题的问题,为什么在JavaScript中,0.1+0.2不能 console.log(0.1+0.2==这里输出的结果是fals console.log(Math.abs(0.1+0.2-0.3)<=结果就是true了。Symbol是ES6中引入的新类型,它非字符串的对象key的集合,在ES6规范中,整个对象系统被用Symbol重塑。SymbolSymbol身:它有哪些部分,它表示什么意思,以及如何创建Symbol类型。SymbolSymbol我们创建Symbol的方式是使用全局的Symbol函数。例如: varmySymbol=Symbol("my一些标准中提到的Symbol,可以在全局的Symbol函数的属性中找到。例如,我们可以使用Symbol.i tor来自定义for…of在对象上的行为: varo=new2o[Symbol.itor]=function()varv=returnnext:function()return{value:v++,done:v>10 for(varvof console.log(v);//0123...代码中我们定义了i tor之后,用for(varvofo)就可以调用这个函数,然后我们可以根据函数的行为,产生一个for…of的行为。这里我们给对象o添加了 tor属性,并且按照迭代器的要求定义了一个010forofoSymbol,也构成了语言的一类接口形式。它们允许编写与语言结合更紧密的API。Object是JavaScript中最复杂的类型,也是JavaScript的机制之一。Object表示对在JavaScript中,对象的定义是“属性的集合”。属性分为数据属性和器属性,二者都是key-value结构,key可以是字符串或者Symbol类型。C++Java于很多人常常会把JavaScript的“类”与类型。事实上,JavaScriptJavaScript所以,须认识到3与newNumber(3)是完全不同的值,它们一个是Number类型,一个是对象类型。Number、StringBoolean,newSymbolnewSymbolJavaScript console.log("abc".charAt(0));甚至我们在原型上添加方法,都可以应用于基本类型,比如以下代码,在Symbol原型上 o方法,在任何Symbol类型变量都可以调用。 Stotype.o=()=>console.log("2vara=console.log(typeofa);//symbol,a o();//o,有所以我们文章开头的问题,答案就是.运算符提供了装箱操作,它会根据基础类型构造一个因为S型转换。大部分类型转换符合人类的,但是如果我们不去理解类型转换的严格定义,很容易造成一些代码中的判断。其中最为臭名昭著的是JS中的“==”运算,因为试图实现跨类型的比较,它的规则复杂这里我们当然也不打算讲解==的规则,它属于设计,并非语言中有价值的部分,很多实践中推荐使用“==”,而要求程序员进行显式地类型转换后,用===比较。NumberString需要注意的是,parseIntparseFloat在不传入第二个参数的情况下,parseInt16“0x”,而且会忽略非数字在一些古老的浏览器环境中,parseInt08误的来源。所以在任何环境下,都建议传入parseInt的第二个参数,而parseFloat则直多数情况下,Number是比parseInt和parseFloat在较小的范围内,数字到字符串的转换是完全符合你的十进制表示。当Number绝对JavaScriptNumber、String、Boolean、SymbolSymbolnew一个Symbol对象,我们可以利用一个函数的call方法来强迫产生装箱。我们可以用console.log看一下这个东西的typeof,它的值是object,我们使用symbolObjectinstanceof可以看到,它是Symbol这个类的实例,我们找它的constructorSymbolSymbolvarsymbolObject=(function(){returnthis;2console.log(typeofsymbolObject);console.log(symbolObjectinstanceofSymbol);console.log(symbolObject.constructor==Symbol);使用内置的ObjectJavaScript varsymbolObject=2console.log(typeofsymbolObject);console.log(symbolObjectinstanceofSymbol);console.log(symbolObject.constructor==Symbol);ClassOtotype.toString varsymbolObject=2 console.log(Ototype.toString.call(symbolObject));//[object在JavaScript中,没有任何方法可以更改私有的Class属性,因此Ototype.toStringinstanceof但需要注意的是,calltypeofJavaScriptToPrimitive(即,StringNumber变成基本类型,再从基本类型转换为对应的String或者Number。valueOftoStringvalueOfvaro=valueOf:()=>{console.log("valueOf");returntoString:()=>{console.log("toString");return 5o*//////o,ovalueOftoString象,然后我们进行o*2这个运算的时候,你会看见先执行了valueOf,接下来是toString,最后抛出了一个TypeError,这就说明了这个拆箱转换失败了。StringtoStringo*2String(o),那1o=2valueOf:()=>{console.log("valueOf");return3toString:()=>{console.log("toString");return4}5//////在ES6@@toPrimitiveSymbol1varo1varo=2valueOf:()=>{console.log("valueOf");return3toString:()=>{console.log("toString");return4}56o[Symbol.toPrimitive]=()=>{console.log("toPrimitive");return789console.log(o+////JavaScriptListRecord:CompletionRecord:用于描述异常、跳出等语句执行过程。Reference:用于描述对象属性、delete等。LexicalEnvironmentEnvironmentRecord:用于描述变量和作用域。DataBlock:用于描述二进制数据。JavaScriptNumberparseInt,JSJavaScript据类型;另一方面,JS语言中提供了typeof这样的运算,用来返回操作数的类型,但typeofobject——Nullfunction——Object从一般语言使用者的角度来看,,我们应该按照typeof的结果去理解语言的类型系统。但JS之父本人也在多个场合表示过,typeof的设计是有缺陷的,只是现在已经错过 售卖。页面已增加防盗追踪,将依 上一 04|HTML语义:如何运用语义类来呈现Wiki网页下一 06|JavaScript对象:面向对象还是基于对象写写

124老师,对于Numberconsole.log()为false,我就另测试了了一下console.log(0.3+0.2==0.5)就为true了呢,试试其他都是true,咕叽咕 71原文:Undefinednullnull作者回复:一、奔跑的兔 62undefinedisapropertyoftheglobalobject;i.e.,itisavariableinglobalscope. varnum=于江 放在实际场景会出现大量NaN。“需要注意的是,parseIntparseFloat啊 31再饭小笛 关于Number类型,如果想要进一步理解可以去参考IEEE754中关于浮点数的表达规范,…悬 22leta=undefined; 14""-""*""/ 13unde

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论