在上一篇文章中,我们介绍了HTML5的新内容和基本页面布局。本文将继续从广义上介绍HTML5的另一个组成部分:JavaScript数据类型。作为一种弱类型语言,JavaScript的特点是动态类型。也就是说,不需要事先声明变量的类型。程序运行时会动态确定类型,在执行过程中可以动态修改变量的类型。同时,不同类型的变量在运行过程中会自动进行隐式类型转换。下面是一些常见的隐式转换示例:varfoo=2020;//typeoffoo->"number"varfoo="SpreadJS"//typeoffoo->"string"varfoo=true+1;//foo=2typeoffoo->"number"varfoo=true+false;//foo=1typeoffoo->"number"varfoo='5'-'2';//foo=3typeoffoo->"number"varfoo=20+20+"SpreadJS"//foo="40SpreadJS"typeoffoo->"string"varfoo="SpreadJS"+20+20//foo="40SpreadJS"typeoffoo->"string"根据最新的ECMAScript标准定义了8种数据类型:Primitivetypes:Boolean,Null,Undefined,Number,BigInt,String,Symbol和对象类型:object需要掌握的几个知识点基本类型知识:基本类型的值是按值访问,指的是在赋值和修改值时,都是通过值传递来完成的。给变量赋值或修改值会重新分配内存空间。例如:vara,b,x,y;a="SpreadJS";b="GrapeCity";x=a;y=b;console.log(a,b,x,y);//result:SpreadJSGrapeCitySpreadJSGrapeCitya和x,b,y之间的赋值是一个完全独立的副本,互不干扰。如果我们再次更改任何一个变量的值,其他具有相同值的变量将不会受到任何影响。严格相等===和非严格相等==对于基本类型,==只比较值。如果是不同类型,转换后会比较,===会比较数据类型。例如:undefined===null//fasleundefined==null//truetrue===1//fasletrue==1//truenull==0//falseNull和Undefinednull和undefined在使用上几乎没有区别,而在非严格使用相等比较的结果也是如此。它们之间的区别在于它们在转换值时具有不同的字面含义。undefined表示未定义,转为值时为NaN,而null为空,转为值时为0。例如:Number(undefined)//NaNNumber(null)//01+undefined//NaN1+null//1两者虽然区别不大,但不会严格按照上面的区分来使用,但在实际中项目应用,对于空值的判断,两者都需要考虑。NaNNaNisNotaNumber,表示非数值类型。任何使用NaN的运算都会返回NaN的值,而NaN不等于NaN。其中有一个全局方法isNaN(),它检查一个值是否能被Number()转换成功。如果转换成功则返回false,否则返回true。例如:NaN==NaN;//fasleisNaN('123')//false可以转换isNaN('abc')//true不能转换浮点数精度错误在JavaScript中,整数和浮点数都属于Number数据类型,所有的数字都是存储为64位浮点数,也就是说JavaScript底层没有整数,1和1.0是一样的。下面举://加法0.1+0.2=0.3000000000000040.1+0.7=0.799999999999999999990.2+0.4=0.6000000000000001///=1989.9999999999998//除以0.3/0.1=2.999999999999999960.69/10=0.06899999999999999//比较0.1+0.2===0.3//false(0.3-0.2)===(0.2-0.1的错误计算)//false的问题在某些系统中是一个严重的问题,尤其是那些涉及金融的系统。这里不解释错误的原因。你可以做你自己的研究。我们仅简要列出解决方案。1\。您可以参考Math.js、decimal.js和big.js等库。2、对于数字精度要求不高的系统,可以格式化保留x位小数进行处理。3、计算时,分别计算小数部分和整数部分,然后合并等。关于引用类型你需要知道的几个知识点:引用类型的值是通过引用来访问的。当操作一个对象时,你实际上是在操作对象的引用而不是实际的对象。给变量赋值会改变对象的引用关系。例如:varobj1={a:1};varobj2=obj1;obj1.a=2;console.log(obj2.a)//结果:2.obj1和obj2是同一个对象obj1={a:3};console.log(obj2.a)//result:2.obj1指向一个新的对象,obj2不改变引用类型===和==意思相同,都是引用比较,即是否是同一个对象,各种类型之间的比较不严格相等==比较类型转换可以参考下表:构造函数,鸭子类型等。虽然方法很多,但是判断的方式有两种:1根据数据类型判断2根据构造函数判断。typeoftypeof可以判断数据类型。根据前面的介绍,javascript变量类型分为值类型和引用类型。typeof的应用场景只能区分值类型的数据类型。例如:typeof42//"number"typeof{}//"object"typeofundefined//"undefined"instanceof和typeof一样,instanceof用来判断引用类型的数据类型。示例:(function(){})instanceofFunction其他还有Object.prototype.toString、constructor、duck类型,这里不再介绍。在了解了JavaScript的基本数据类型知识后,我们后面会继续为大家介绍CSS相关的内容。
