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

JS基础总结(一)——数据类型

时间:2023-04-05 18:18:59 HTML5

前言2019农历即将过去。趁着这几天工作忙,整理了一下javascript的基础知识,在这里分享给大家。我可以给一个小表扬。本文也收录在github中。我的github:github.com/Michael-lzgJavaScript是一种弱类型语言,JavaScript在声明变量时没有预先确定的类型。变量的类型就是它的值的类型,也就是说变量当前的类型是由它的值决定的。夸张地说,上一秒的String类型可能下一秒就是Number类型。在这个过程中,可能会进行一些操作,发生强制类型转换。js数据分为两种类型:原始数据类型和引用数据类型。基本数据类型有:string、number、boolean、undefined、null和symbol(符号)引用数据类型有:Object、Function、Date、RegExp等基本数据类型的特点1.基本数据类型是按值访问的,它意味着我们可以操纵存储在变量中的实际值;2.基本数据类型的值是不可变的,任何方法都不能改变一个基本数据类型的值letname='zhangsan'name.substr()console.log(name)//output:zhangsanletage='firstblood'age.toUpperCase()console.log(age)//output:firstbloodsubstr()andtoUpperCase()方法返回一个新的字符串,与最初定义的变量名无关。3.基本数据类型不能添加属性和方法letuser='zhangsan'user.age=18user.method=function(){console.log('12345')}console.log(user.age)//output:undefinedconsole.log(user.method)//输出:undefined4。基本数据类型的赋值是简单的赋值(不影响原变量的值)leta=18letb=aa++console.log(a)//Output:19console.log(b)//Output:185.基本数据类型的比较是值的比较vara='{}'varb='{}'console.log(a===b)//输出:true6.基本的值类型在内存中占用固定大小的空间,存放在栈内存中。引用数据类型引用类型是存储在堆内存中的对象。变量其实是一个保存在栈内存中的指针(保存的是堆内存中的引用地址),这个指针指向堆内存。varobj1=newObject()varobj2=obj1obj2.name='Ihaveaname'console.log(obj1.name)//Ihaveaname数据类型转换为string1,toString()方法:注意,不能传null和undefined2.String()方法:两者都可以传递letab='zhangsan'letbc=nullletcd=undefinedconsole.log(ab.toString())//output:zhangsanconsole.log(bc.toString())//报错console.log(cd.toString())//报错console.log(String(ab))//output:zhangsanconsole.log(String(bc))//output:nullconsole.log(String(cd))//output:undefined3,隐式转换:num+"",当+两边的运算符是字符串类型,而一个运算符是另一种类型时,先把其他类型转成字符串,再转成字符串进行字符串拼接,返回字符串vara=truevarstr=a+''console.log('str')intonumerictype1,Number():可以将任意值转换成数值,如果要转换的字符串如果有不是值的字符,返回NaN2,parseInt()/parseFloat():parseFloat()将字符串转为浮点数,parseFloat()和parseInt很相似,不同的是parseFloat会解析第一个。遇到第二个的时候。或者以非数字结尾,如果解析的内容中只有整数,则将其解析为整数。vara='12.3px'console.log(parseInt(a))//12console.log(parseFloat(a))//12.3letb='abc2.3'console.log(parseInt(b))//NANconsole.log(parseFloat(b))//NAN3,隐式转换varstr='123'varnum=str-1console.log(num)//1224,isNaN()函数用于判断是否为非数字类型,如果传入的参数是非数字类型,则返回true,否则返回false并转换为Boolean()除0''(空字符串)外,nullundefinedNaN将转换为false,其他转换为falsetotrue判断JS数据类型1、typeof()函数对于原始数据类型,我们可以通过typeof()函数来判断他的数据类型。但不能用来区分引用数据类型,因为所有引用数据类型都会返回“object”。typeof'seymoe'//'string'typeoftrue//'boolean'typeof10//'number'typeofSymbol()//'symbol'typeofnull//'object'无法判断是否为nulltypeofundefined//'undefined'typeof{}//'object'typeof[]//'object'typeof(()=>{})//'function'2,instanceof对于引用类型,我们使用instanceof进行类型判断。varobj={}objinstanceofObject//truevararr=[]arrinstanceofArray//true3,Object.prototype.toString.call()提供了javascript高级编程中的另一种方法,可以用来判断原始Data类型和引用数据类型vararr=[]Object.prototype.toString.call(arr)=='[objectArray]'//truevarfunc=function(){}Object.prototype.toString.call(func)=='[objectFunction]'//true4,constructor构造函数和instanceof很相似。但是构造函数检测Object和instanceof不一样,同样可以处理基本数据类型的检测。varaa=[1,2]console.log(aa.constructor===Array)//trueconsole.log(aa.constructor===RegExp)//falseconsole.log((1).constructor===Number)//truevarreg=/^$/console.log(reg.constructor===RegExp)//trueconsole.log(reg.constructor===Object)//falsejavascript的内置方法toString()方法返回一个表示对象字符串。valueOf()方法返回指定对象的原始值。varstr=newString('123')console.log(str.valueOf())//123varnum=newNumber(123)console.log(num.valueOf())//123vardate=newDate()console.log(date.valueOf())//1526990889729varbool=newBoolean('123')console.log(bool.valueOf())//truevarobj=newObject({valueOf:()=>{return1}})console.log(obj.valueOf())//1valueOf()和toString()会在某些情况下调用自己。包装器对象(wrapperobject)我们来看一个例子toPrimitive类型,所以它没有属性和方法,但是在这个例子中,我们调用了一个toUpperCase()方法,它没有抛出错误,同样返回了对象的变量值。原因是原始类型的值被临时转换或强制转换为对象,所以名称变量表现得像一个对象。name.toUpperCase()在幕后看起来像这样:console.log(newString(name).toUpperCase())//"MARKO"除了null和undefined之外的每个基本类型都有自己的包装对象。即:String、Number、Boolean、Symbol和BigInt。相关文章总结前端性能优化方法几种常见的JS递归算法搭建一个vue-cli移动端H5开发模板封装一个toast和dialog组件发布到npm从零开始搭建一个webpack项目总结几种webpack打包优化方法读取所有前端路由、后端路由、单页应用、多页应用。关于几种手机??软键盘的坑和解决办法浅谈JavaScript防抖和节流