深入ECMAScript(数据类型)
来源:互联网 发布:言论自由的界限 知乎 编辑:程序博客网 时间:2024/06/05 00:53
ECMAScript中一共有5种简单数据类型(基本数据类型):Undefined,Null,Boolean,Number,String.
和1中复杂数据类型:Object.
typeof操作符
因为ECMAScript是弱语言(松散型)语言,所以需要一种方式来检测数据的类型。
typeof的返回值:
1.”undefined”-如果该值未定义
2.”boolean”-如果该值是布尔值
3.”string”-如果该值是字符串
4.”number”-如果该值是数值
5.”object”-如果该值是对象或者null
6.”function”-如果该值是函数
Undefined
Undefined类型的值只有一个,就是特殊的undefined.
如:
var info;alert(info==undefined);//true//同上var info=undefined;alert(info==undefined);//true
这里有一点比较特殊
即对变量使用typeof函数时出现的情况:
var info;//变量声明后默认取得值undefined//下方值没有声明//var info2;alert(typeof info);//"undefined"alert(typeof info2);//"undefined"//如果直接输出变量alert(info);//"undefined"alert(info2);;//产生错误
这里在看上面部分时,可以理解为info,info2虽然在技术角度上看是由区别的,但是在实际使用时,无论对哪一个变量,都无法执行任何真正的操作。
Null
Null类型的值只有一个,就是特殊的null.
逻辑角度看:null值表示一个空对象指针。所以使用typeof时将会返回”object”.
var info=null;alert(typeof info);//"object"
实际上,undefined值是派生自null值的,所以在用以下代码时,将会返回true.
alert(null==undefined);//true
当然,这里的(==)操作符出于比较的原因将会对其操作数进行转换。
Boolean
Boolean类型的值只有2个,即:true和false.
但是这里的true和false与数字值不一样,因此true不一定等于1,false不一定等于0.
Boolean类型的值是区分大小写的,所以True,False与true,false是不一样的.
虽然Boolean类型的字面值只有2个,但是所有其他类型都有其对应的boolean值,即所有类型都可以使用Boolean()函数来转化为对应的boolean值。如:
var info="hello world";var infoBoolean=Boolean(info);
对应的返回值如下表所示:
类型 转换为true 转换为falseBoolean true falseString 任何非空字符串 ""(空字符串)Number 任何非零数字值(包括无穷大) 0和NaNObject 任何对象 nullUndefined n/a(或N/A,不适用) undefined
Number
1.整数值:
var info=10;//十进制整数var info=070;//八进制56 ;八进制的第一位必须为0,之后每一位都为(0-7),如果有一位超出范围,则忽略前导零var info=08;//解析为8同理,十六位进制的前导为0x,之后每一位为(0-9)(A-F),(A-F)页可以是(a-f).var info=0xA;//十六进制10算数计算时,八进制和十六进制的数将会转化成十进制数
2.浮点值
在保存浮点值时,所需的保存空间是整数值的两倍,因此,ECMAScript将会不失时机的将浮点值转化为整数值
var info=1.//解析为1var info=1.0//解析为1
对于极大极小值(可以使用e表示法,即科学计数法):
var info=3.125e7//等于31250000
浮点数的最高精度是17位小数,但是在进行算数计算时,精度会下降,比如:
//0.1加0.2的值不等于0.3,而是0.30000000000000004if(a+b==0.3){alert("hello");//无法实现}
3.数值范围
ECMAScript所能保存的最小值保存在Number.MIN_VALUE中,大多数浏览器中,该值为5e-324;所能保存的最大值保存在Number.MAX_VALUE,大多数浏览器中,该值为1.7976931348623157e+309。
如果在某次计算中得出了超过范围的数值,则该数值将会自动转换为Infinity值或者-Infinity。如果某个值为Infinity或者-Infinity,则该值将不能进行之后的运算。
//可以使用 isFinite()函数检查一个值是否有穷var info=Number.MIN_VALUE+Number.MAX_VALUE;alert(isFinite(info));//false
4.NaN
NaN(非数值),该值用来表示本来要返回数值的操作数未返回数值的情况(即不会抛出错误)。比如数值除以非数值,将会返回NaN。
任何涉及NaN的操作都会返回NaN(如NaN/10)。
NaN与任何值都不相等,包括自身。
//可以通过isNaN()函数检测一个值是否为数值,不能转换为数值的都会返回truealert(isNaN(NaN));//truealert(isNaN(10));//falsealert(isNaN("10"));//falsealert(isNaN("blue"));//truealert(isNaN(true));//false对象也可以被isNaN()函数调用,当被调用时,将会先调用对象的valueof()方法,然后确定该方法的返回值是否可以转换为数值,如果不不能,则基于该返回值再调用toString()方法,再测试返回值。(这也是ECMA中内置函数和操作符的一般执行流程)
5.数值转换
共有3个数值转换函数:
1.Number()
2.parseInt()
3.paresFloat()
1可用于任何数值类型,2和3则转么用于将字符串转化为数值。
Number()转化规则:1.Boolean. true->0;false->02.数字值. 即等于传入和返回3.null. 04.undefined. NaN5.字符串: 只包含数字. 转化为十进制数值. 只包含浮点格式. 转化为对应的浮点值 只包含十六进制. 转化为对应的十进制数值 空的. 转化为0 其余的. NaN6.对象. 先调用对象的valueof方法,按照上面的规则转换,如果结果为NaN;则调用toString()方法,再按照上面的方法检测返回值.
Number()在转换字符串数值时会显得比较繁琐,因此可以使用parseInt()和parseFloat()方法转换字符串数值。
parseInt()在转换字符串时,将会忽略前面的空格,直到找到第一个非空字符,如果第一个字符不为数字或者负号,则返回NaN;如果第一个是数字或者负号,则继续解析,直到不是数字为止,所以”1234hello”将会被解析为 1234 ;”22.1”将会被解析为 22 .
parseFloat()同理,只不过其只会接受一个小数点,如”12.34.5”将会被解析为 12.34 .
String
String类型用于表示由零或者多个由16位Unicode字符组成的字符序列,即字符串。
一些转义字符:
\n 换行\t 制表\b 退格\r 回车\f 换页符\\ 斜杠\' 单引号\" 双引号\xnn 十六进制,n为(0-F)\unnn 十六进制表示的Unicode字符
1.字符串特点:
当字符串创建时,其值就不能不能被改变了,要改变某个变量所保存的字符串,首先需要销毁原来的字符串,然后将新字符串填充该变量。
2.转换为字符串
把一个值转换为字符串有2种方法:
1.几乎每个值都有的toSting()方法。(null和undefined值没有该方法;数值,布尔值,对象和字符串值都有该方法)
在使用toString()函数时,可以通过传递参数来控制返回值的进制,如:
var info=10;info.toString();//10info.toString(2);//1010...
之前也提到过Null和Undefined值是没有toSting()函数的,那么如果不知道一个值是否为null或者undefined的时候,可以使用Sting()函数,该函数能将任何类型的值转换为字符串。其遵守规则如下:
1.如果值有toSting()函数,则调用toString()函数。
2.如果值是Null,则返回”null”。
3.如果值是undefined,则返回”undefined”。
Object
Object类型其实就是一组数据和功能的集合,通过使用关键词new加上想要创建的类型的名字来创建。
如果创建Object类型的实例并且给其添加属性方法,就可以创建自定义对象:
var info=new Object();
Object的每个实例都拥有以下属性和方法:
constructor //保存着用以创建当前对象的函数,上面例子中就是Object()hasOwnProperty() //用以检查给定的属性在实例中是否存在,但不包括实例的原型属性isPrototypeOf(Object) //检查传入的对象是否为当前对象的原型propertyIsEnumerable() //检查给定的属性是否能够通过for-in语句来枚举toLocaleString() //返回对象的字符串表示,该字符串和执行环境对应toString() //返回对象的字符串表示valueOf() //返回对象的字符串,数值,布尔值表示
- 深入ECMAScript(数据类型)
- ECMAScript的数据类型(1)
- ECMAScript的数据类型(2)
- ECMAScript数据类型关系总结
- 【JavaScript学习】ECMAScript数据类型
- ECMAScript:基本数据类型与引用数据类型
- ECMAScript 中有5种简单数据类型
- 原生ECMAScript模块(ECMAScript modules)概述
- 深入理解JavaScript系列(18):面向对象编程之ECMAScript实现(推荐)
- 深入理解JavaScript系列(18):面向对象编程之ECMAScript实现(推荐)
- 深入理解JavaScript系列(18):面向对象编程之ECMAScript实现(推荐)
- 深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
- 深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
- 深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
- 深入掌握 ECMAScript 6 异步编程(四):async函数的含义与用法
- 深入理解ECMAScript中的声明提升、this关键字及作用域(链)
- 深入掌握 ECMAScript 6 异步编程(四):async函数的含义与用法
- 深入理解ECMAScript的函数参数
- iOS键盘、选取器上的工具栏
- Python爬虫入门七之正则表达式
- 通过广播使Android程序完全退出
- 小明的存钱计划
- 贪吃蛇大战隐私政策
- 深入ECMAScript(数据类型)
- 汉诺塔问题
- 07_01020304_linux vi
- 分页的分页加搜索功能技术演示
- 数据结构实验:连通分量个数
- 那些年没有躲过的Appium的坑
- WPF中DataGrid实现全选
- IntelliJ Idea的黑色主题+代码高亮
- Linux memcache