深入ECMAScript(数据类型)

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                转换为false
Boolean      true                    false
String       任何非空字符串             ""(空字符串)
Number       任何非零数字值(包括无穷大) 0NaN
Object       任何对象                  null
Undefined    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.//解析为1
var info=1.0//解析为1

对于极大极小值(可以使用e表示法,即科学计数法):

var info=3.125e7//等于31250000

浮点数的最高精度是17位小数,但是在进行算数计算时,精度会下降,比如:

//0.1加0.2的值不等于0.3,而是0.30000000000000004
if(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()函数检测一个值是否为数值,不能转换为数值的都会返回true
alert(isNaN(NaN));//true
alert(isNaN(10));//false
alert(isNaN("10"));//false
alert(isNaN("blue"));//true
alert(isNaN(true));//false

对象也可以被isNaN()函数调用,当被调用时,将会先调用对象的valueof()方法,然后确定该方法的返回值是否可以转换为数值,如果不不能,则基于该返回值再调用toString()方法,再测试返回值。(这也是ECMA中内置函数和操作符的一般执行流程)

5.数值转换

共有3个数值转换函数:
1.Number()
2.parseInt()
3.paresFloat()
1可用于任何数值类型,2和3则转么用于将字符串转化为数值。

Number()转化规则:
1.Boolean. true->0;false->0
2.数字值. 即等于传入和返回
3.null. 0
4.undefined. NaN
5.字符串:
    只包含数字. 转化为十进制数值.
    只包含浮点格式. 转化为对应的浮点值
    只包含十六进制. 转化为对应的十进制数值
    空的. 转化为0
    其余的. NaN
6.对象. 先调用对象的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();//10
info.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()  //返回对象的字符串,数值,布尔值表示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值