ECMAScript中有5种基本数据类型:Undefined、Null、Boolean、Number、String。还有1种复杂数据类型—Object,Object实质上是由一组无序的名值对(键值对)组成的。ECMAScript不支持任何创建自定义类型的机制。

由于ECMAScript是松散型的,所以需要一种手段来检测变量的数据类型,typeof就是具有这种功能的操作符。用typeof检测变量可能返回以下某个字符串:
| "undefined" | 变量未定义 |
| "boolean" | 变量是布尔值 |
| "string" | 变量是字符串 |
| "number" | 变量是数值 |
| "object" | 变量是对象或者null |
| "function" | 变量是函数 |
从技术的角度讲,函数在ECMAScript中是对象,不是一种数据类型。然而,函数有一些特殊的属性,因此通过typeof来区分函数和其它对象是有必要的。
Undefined类型只有一个值,就是特殊的undefined。在使用var声明变量但未初始化时,这个变量的值就是undefined,如:
var a; alert(a == undefined); //true
不过,包含undefined值的变量和尚未定义的变量不一样,如:
var a; // 这个变量声明之后默认取得了undefined值 // 下面这个变量并没有声明 // var b alert(a); // "undefined" alert(b); // 产生错误
然而对未声明或者声明没有初始化的变量使用typeof都会返回undefined,如:
var a; // var b; alert(typeof a); // "undefined" alert(typeof b); // "undefined"
Null类型也只有一个值,就是null。从逻辑的角度来看,null值表示一个空指针,所以用typeof检测null值会返回"object",如:
var car = null; alert(typeof car); // "object"
所以如果要定义变量来存放对象,最好将该变量初始化为null。实际上,undefined值是继承自null值的,所以判断它们的相等性会返回true:
alert(null == undefined); // true
尽管null和undefined有这样的关系,但它们用途是完全不同的,因为无论什么时候都没有必要把一个变量的值显示的设置为undefined,然而当定义一个还未保存对象的对象变量时,就应该将变量设置为null,这样不仅可以体现null作为空对象的指针,还有能很好地区分null和undefined。
Boolean类型有两个字面值:true和false,但是ECMAScript中所有类型的值都能调用Boolean()函数转换成Boolean类型的值,下表列出了各种数据类型对应的转换规则:
| 数据类型 | 转换为true的值 | 转换为false的值 |
| Boolean | true | false |
| String | 任何非空字符串 | ""空字符串 |
| Number | 任何非零数字值 | 0和NaN |
| Object | 任何对象 | null |
| Undefined | / | undefined |
Number类型分为整数和浮点数,整数可以用十进制,八进制或十六进制表示,如:
var num1 = 22; //十进制整数 var num2 = 070; //八进制的56 var num3 = 079; // 无效的八进制,解析为十进制79 var num4 = 08; //无效的八进制,解析为十进制8 var num5 = 0xA; //十六进制的10 var num6 = 0x1f; //十六进制的31
但是八进制字面量在严格模式下是无效的,在进行算数计算时,所有的数值最终都会转换为十进制数值。浮点数值必须包含一个小数点,如:
var floatNum1 = 1.1; var floatNum2 = .1; //有效,但不推荐 var floatNum3 = 1.; //小数点后面没有数字,解析为1 var floatNum4 = 10.0; //整数,解析为10
浮点数值的最高精度是17位小数,但在进行算数计算时精确度远不如整数,例如:
var a = 0.1; var b = 0.2; var c = a + b; //c的值为0.30000000000000004
NaN,即非数值,是一个特殊的Number值,NaN有两个特点:任何和NaN操作的结果都会返回NaN,NaN与任何值都不相等,包括NaN。使用isNaN()函数可以判断一个值是不是NaN,isNaN()在接收到一个参数时,会尝试将这个值转换为数值,任何不能转换为数值的值都会返回true,如:
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false(10是一个数值)
alert(isNaN("10")); //false(可以被转换为数值10)
alert(isNaN("abc")); //true(不能转换为数值)
alert(isNaN(true)); //false(可以转换为数值1)
var obj = {name:"zhangsan", age:"1"};
alert(isNaN(obj)); //true
isNaN()也能转换对象,对象调用isNaN()时,会首先调用对象的valueOf()方法,然后确定该方法的返回值是否可以转换为数值,如果不能,则用这个返回值再调用toString()方法,再测试返回值。
非数值转换成数值的方法有三个:Number()、parseInt()、parseFloat()。Number()可以转换任何数据类型的值,而parseInt()和parseFloat()只能转换字符串。
Number()函数有以下转换规则:
1.如果是Boolean值,true转换为1,false转换为0;
var num = Number(true); //1 var num2 = Number(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()方法,再测试返回值。
var num = Number("Hello World"); //NaN
var num2 = Number(""); //0
var num3 = Number("01"); //1
var num4 = Number("01.1"); //1.1
var obj = {name:"zhangsan", age:"1"};
alert(Number(obj)); //NaN
由于Number()在转换字符串是比较复杂,所以转换字符串常用parseInt()和parseFloat()。这两个函数在转换字符串时,会检测该字符串是否符合数值模式,从第一个非空格字符开始解析,如果第一个字符不是数值或者负号,则返回NaN(包括空字符串)。如果第一个字符是字符串,则继续解析后面的字符,直到解析完所有的字符或者遇到非数字字符。
parseInt()能够识别各种整数格式(十进制、八进制、十六进制),如果字符串以"0x"开头且后跟数字字符,就会被解析为十六进制,如果以"0"开头且后跟数字字符,则会被解析为八进制(ECMAScript5不识别八进制,会将前面的0忽略,解析为十进制)。
var num = parseInt("123Hello"); //123
var num2 = parseInt(""); //NaN
var num3 = parseInt("0xA"); //10(十六进制)
var num4 = parseInt("22.3"); //22
var num5 = parseInt("070"); //56(ECMAScript3八进制) 70(ECMAScript5十进制)
var num6 = parseInt("23"); //23(十进制)
为了解决兼容性问题,parseInt()提供第二个参数,以何种数值格式解析。
var num1 = parseInt("0xAF", 16); //175
var num2 = parseInt("AF", 16); //175,可以省略前面的"0x"
var num3 = parseInt("10", 2); //2(二进制)
var num3 = parseInt("10", 8); //8(八进制)
var num3 = parseInt("10", 10); //10(十进制)
var num3 = parseInt("10", 16); //16(十六进制)
parseFloat()只识别第一个小数点,后面的小数点就无效了,同时parseFloat()只识别是十进制值,所以没有第二个参数,别的格式数值会被解析为0。
var num = parseFloat("123Hello"); //123
var num = parseFloat("0xA"); //0
var num = parseFloat("12.1"); //12.1
var num = parseFloat("12.1.1"); //12.1
var num = parseFloat("023"); //23
var num = parseFloat("1.1e3"); //1100
String类型值由若干个Unicode字符组成的字符序列构成,可以由单引号('')或者双引号("")表示,但是左右引号必须匹配。
var str1 = "abc"; var str2 = 'abc';<br>var str3 = "abc'; //语法错误
将一个值显式转换为字符串有两种方法,toString()和String(),数值、布尔值、对象和字符串都有toString()方法和String()方法,而undefined和null只有String()方法,toString()的参数是转换的进制格式。
var num = 10; alert(num.toString()); //"10" alert(num.toString(2)); //"1010" alert(num.toString(8)); //"12" alert(num.toString(10)); //"10" alert(num.toString(16)); //"A" alert(true.toString()); //"true" String(num); //"10" String(true); //"true" String(null); //"null" var num1; String(num1); //"undefined"
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# javascript
# 数据类型
# javascript类型转换
# js 数据类型转换总结笔记
# JavaScript中的数据类型转换方法小结
# JavaScript实现数据类型的相互转换
# 详解Javascript数据类型的转换规则
# JavaScript中数据类型转换总结
# JavaScript的数据类型转换原则(干货)
# JavaScript数据类型转换详解(推荐)
# JavaScript数据类型转换简单方法举例
# 转换为
# 第一个
# 返回值
# 浮点
# 是一个
# 空字符串
# 第二个
# 只有一个
# 设置为
# 转换成
# 则将
# 就会
# 都有
# 很好
# 都不
# 出了
# 是有
# 什么时候
# 都能
# 是由
相关文章:
如何在香港服务器上快速搭建免备案网站?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
香港服务器如何优化才能显著提升网站加载速度?
南京网站制作费用,南京远驱官方网站?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
建站之星logo尺寸如何设置最合适?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
微信推文制作网站有哪些,怎么做微信推文,急?
如何快速启动建站代理加盟业务?
平台云上自主建站:模板化设计与智能工具打造高效网站
实例解析Array和String方法
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何破解联通资金短缺导致的基站建设难题?
如何快速重置建站主机并恢复默认配置?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
专业公司网站制作公司,用什么语言做企业网站比较好?
智能起名网站制作软件有哪些,制作logo的软件?
外贸公司网站制作哪家好,maersk船公司官网?
如何解决VPS建站LNMP环境配置常见问题?
建站主机CVM配置优化、SEO策略与性能提升指南
历史网站制作软件,华为如何找回被删除的网站?
焦点电影公司作品,电影焦点结局是什么?
如何在腾讯云服务器上快速搭建个人网站?
广德云建站网站建设方案与建站流程优化指南
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
网站制作软件有哪些,制图软件有哪些?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
建站上市公司网站建设方案与SEO优化服务定制指南
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
制作国外网站的软件,国外有哪些比较优质的网站推荐?
香港服务器WordPress建站指南:SEO优化与高效部署策略
微信小程序 五星评分(包括半颗星评分)实例代码
C#如何使用XPathNavigator高效查询XML
如何选择高效响应式自助建站源码系统?
建站之星CMS五站合一模板配置与SEO优化指南
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
如何挑选优质建站一级代理提升网站排名?
三星网站视频制作教程下载,三星w23网页如何全屏?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
如何获取免费开源的自助建站系统源码?
大同网页,大同瑞慈医院官网?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
c# 在ASP.NET Core中管理和取消后台任务
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
*请认真填写需求信息,我们会在24小时内与您取得联系。