问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

javascript基本数据类型详解和如何进行转换操作

发布网友 发布时间:2023-07-30 15:54

我来回答

1个回答

热心网友 时间:2023-07-31 23:39


javascript中有5种基本数据类型:Undefined、Null、Boolean、Number、String。还有1种复杂数据类型—Object,Object实质上是由一组无序的名值对(键值对)组成的。javascript不支持任何创建自定义类型的机制。
由于javascript是松散型的,所以需要一种手段来检测变量的数据类型,typeof就是具有这种功能的操作符。用typeof检测变量可能返回以下某个字符串:
"undefined"变量未定义"boolean"变量是布尔值"string"变量是字符串"number"变量是数值"object"变量是对象或者null"function"变量是函数从技术的角度讲,函数是对象,不是一种数据类型。然而,函数有一些特殊的属性,因此通过typeof来区分函数和其它对象是有必要的。
Undefined类型只有一个值,就是特殊的undefined。在使用var声明变量但未初始化时,这个变量的值就是undefined,如:


不过,包含undefined值的变量和尚未定义的变量不一样,如:


然而对未声明或者声明没有初始化的变量使用typeof都会返回undefined,如:


Null类型也只有一个值,就是null。从逻辑的角度来看,null值表示一个空指针,所以用typeof检测null值会返回"object",如:


所以如果要定义变量来存放对象,最好将该变量初始化为null。实际上,undefined值是继承自null值的,所以判断它们的相等性会返回true:
alert(null == undefined); // true
尽管null和undefined有这样的关系,但它们用途是完全不同的,因为无论什么时候都没有必要把一个变量的值显示的设置为undefined,然而当定义一个还未保存对象的对象变量时,就应该将变量设置为null,这样不仅可以体现null作为空对象的指针,还有能很好地区分null和undefined。
Boolean类型有两个字面值:true和false,但是所有类型的值都能调用Boolean()函数转换成Boolean类型的值,下表列出了各种数据类型对应的转换规则:
数据类型转换为true的值转换为false的值BooleantruefalseString任何非空字符串""空字符串Number任何非零数字值0和NaNObject任何对象nullUndefined/undefinedNumber类型分为整数和浮点数,整数可以用十进制,八进制或十六进制表示,如:


但是八进制字面量在严格模式下是无效的,在进行算数计算时,所有的数值最终都会转换为十进制数值。浮点数值必须包含一个小数点,如:


浮点数值的最高精度是17位小数,但在进行算数计算时精确度远不如整数,例如:


NaN,即非数值,是一个特殊的Number值,NaN有两个特点:任何和NaN操作的结果都会返回NaN,NaN与任何值都不相等,包括NaN。使用isNaN()函数可以判断一个值是不是NaN,isNaN()在接收到一个参数时,会尝试将这个值转换为数值,任何不能转换为数值的值都会返回true,如:


isNaN()也能转换对象,对象调用isNaN()时,会首先调用对象的valueOf()方法,然后确定该方法的返回值是否可以转换为数值,如果不能,则用这个返回值再调用toString()方法,再测试返回值。
非数值转换成数值的方法有三个:Number()、parseInt()、parseFloat()。Number()可以转换任何数据类型的值,而parseInt()和parseFloat()只能转换字符串。
Number()函数有以下转换规则:
1.如果是Boolean值,true转换为1,false转换为0;


2.如果是Number值,就和传入的值一样;
var num = Number(1); //1
3.如果是null,转换为0;
var num = Number(null); //0
4.如果是undefined,转换为NaN;
var num = Number(undefined); //NaN
5.如果是String值,要分多种情况,如果是空字符串,则转换为0;如果是纯数字的字符串,则将其转换为相对应的数值,如果字符串是数字且包含".",则将其转换为对应的浮点数值(如果字符串最前面是0,会被忽略),如果字符串是有效的十六进制格式,会将其转换为对应的十进制数值;如果字符串包含上述格式之外的字符,则转换为NaN;如果字符串是对象,会首先调用对象的valueOf()方法,然后确定该方法的返回值是否可以转换为数值,如果结果是NaN,则调用toString()方法,再测试返回值。


由于Number()在转换字符串是比较复杂,所以转换字符串常用parseInt()和parseFloat()。这两个函数在转换字符串时,会检测该字符串是否符合数值模式,从第一个非空格字符开始解析,如果第一个字符不是数值或者负号,则返回NaN(包括空字符串)。如果第一个字符是字符串,则继续解析后面的字符,直到解析完所有的字符或者遇到非数字字符。
parseInt()能够识别各种整数格式(十进制、八进制、十六进制),如果字符串以"0x"开头且后跟数字字符,就会被解析为十六进制,如果以"0"开头且后跟数字字符,则会被解析为八进制(ECMAScript5不识别八进制,会将前面的0忽略,解析为十进制)。


为了解决兼容性问题,parseInt()提供第二个参数,以何种数值格式解析。


parseFloat()只识别第一个小数点,后面的小数点就无效了,同时parseFloat()只识别是十进制值,所以没有第二个参数,别的格式数值会被解析为0。


String类型值由若干个Unicode字符组成的字符序列构成,可以由单引号('')或者双引号("")表示,但是左右引号必须匹配。


将一个值显式转换为字符串有两种方法,toString()和String(),数值、布尔值、对象和字符串都有toString()方法和String()方法,而undefined和null只有String()方法,toString()的参数是转换的进制格式。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
陌陌发语音出现转码失败怎么办 女孩2010年5月10号阴历3月27早晨9点55分出生的五行缺什么 钟姓男孩名字2023年5月10日出生的 凤眼果有什么营养?凤眼果的这些营养你都知道吗? 专升本成绩多少合格 山东专升本成绩多少合格 山东2022年专升本成绩什么时候出 2024专升本成绩公布时间及入口 2023年山东专升本各专业录取分数线 什么时候出专升本成绩 山东专升本综合素质测评成绩怎么算 ...变量名可以包含小数点或者内嵌的类型声明字符吗??? 天津理工大学二本学费是多少一年 天津商业大学宝德学院学费多少 男生试探你家境代表什么 男朋友以家庭条件很差来试探我,其实他家里条件很好? 总觉得相亲男在试探我的家境,这正常吗 奥拉帕利怎么查真假 从犀牛坡坐1号车到大朗水口吗? 大郎公园去犀牛坡怎么走 惠州伯恩光学到东莞大郎华为集困有多远,怎么坐车去 从大朗犀牛坡到惠州大亚湾怎么坐车最快?最方便? 惠州长宁到东莞大郎多少公里 从惠州市开车到东莞大郎镇 I would defendher from being hurt为什么用being hurt? defend sovereignty china out of ph water是什么意思 生气勃勃相近的词语 拖鞋前面容易翻 眉山和邛崃哪个好 成都的地理优势是什么? 邛崃火井古镇的资源优势 政府采购指标衡量的是什么内容 梦见婴儿游泳是什么意思 梦见婴儿游泳戏水的预兆 为什么买的翡翠佛吊坠刻的不好 南京姜业工贸有限公司介绍? 陕西宝姜石化有限责任公司的介绍 法人姓姜起个什么土方工程公司的名称好 为什么有的人总是在你面前示强,表现自己很厉害的样子,其实一点也不厉害... 梦见太阳光照射是什么意思 almost和nearly有什么区别呢? nearly & almost有什么区别? vivox30手机有几个颜色 寻找一部民国生活小说,主角做巡警的,最后大结局因为什么小事儿又被开除... 我要临摹漫画的话,日本谁的比较好呢 求高手翻译两段汉字为英文 减肥总想吃教你2招管住嘴! 618大促京东和天猫,到底你选择了谁家消费 教育研究取样的基本方法 求刘亦菲,杨幂合成图 杨幂你以为你是刘亦菲,杨幂海报和刘亦菲海报一模一样