标签:
ECMAScript中有5种基本数据类型:Undefined、Null、Bollean、Number和String,1种复杂数据类型:Object。
鉴于ECMAScript是松散类型的,所以提供了检测给定变量的数据类型的操作符—typeof。对一个值使用此操作符可能返回下列某个字符串:
“undefined”—如果这个值未定义
“boolean”—如果这个值是布尔值
“string”—如果这个值是字符串
“number”—如果这个值是数值
“object”—如果这个值是对象或null
“function”—如果这个值是函数
l Undefined类型
此类型只有一个值—undefined。在使用var声明变量但未对其加以初始化时这个变量就是undefined。
例:var age;
alert(age);//”undefined”
alert(typeof age);//”undefined”
下面是一个奇怪的现象:
alert(typeof age);//”undefined”
alert(age);//报错
如上,在没有进行申明变量的时候使用typeof仍然输出“undefined”。这就要求我们尽量显式地初始化变量,以致在使用typeof操作符时能区分变量到底是没有声明还是没有初始化。
l Null类型
此类型也只有一个值—null,它表示一个空对象指针。所以使用typeof时会返回“object”字符串。
值得注意的是由于undefined值是由null值派生而来,因此ECMA-262规定它们的相等性测试要返回true。
例:alert(null==undefined);//true
任何情况下都没有必要把一个变量值显式地设置为undefined,但对null而言,只要意在保存的对象的变量还没有真正保存对象之前,推荐显式地让该变量保存null值。
l Boolean类型
此类型有两个字面量值:true和false,区分大小写。
ECMAScript规定所有类型的值都可以调用转型函数Boolean()来将自身转化为对应的Boolean值。
转换规则:
数据类型 |
true |
false |
Number |
任何非零数字值 |
0和NaN |
String |
任何非空字符串 |
空字符串 |
Object |
任何对象 |
null |
undefined |
not/applicable |
undefined |
l Number类型
最基本的数值字面量格式是十进制整数
例:var num=44;
八进制字面值第一位必须是0,然后才是八进制数字序列(0-7)
例: var num1=060;//八进制的48
var num2=096;//无效八进制数值—解析为96
如上的num2,字面值中数值超出了范围,那么前导零将被忽略,后面的数值被当作十进制数值解析。注,八进制字面量在严格模式下无效,会导致支持的JavaScript引擎抛出错误。
十六进制自面值的前两位是0x,后跟任何十六进制数字(0-9和A-F,其中A-F大小写都行)。
在进行算术计算时,所有八进制和十六进制表示的数值最终都将被转成十进制数值。
(1) 浮点数值
例:var floatNum1=1.1;var floatNum2=0.1;var floatNum3=.1;
vat floatNum4=1.0; var floatNum5=1.;
JavaScript中浮点数值需要的内存空间是保存整数值的两倍。因此,ECMAScript会某些情况下将浮点数转化为整数进行运算,如上定义的floatNum4和floatNum5。
ECMAScript中科学计数法:(e是以10位底的幂中的指数)
例:var floatNum6=3.1215e10; var floatNum7=4e-10;
注意:由于浮点数的算术运算精确度不比整数,所以不要试着测试浮点数运算。例:alert((0.1+0.2)==0.3);
(2) 数值范围
ECMAScript中能表示的
最大值为Number.MIN_VALUE或Number.POSITIVE_INFINITY,最小值Number.MAX_VALUE或Number.NEGATIVE_INFINITY,超出范围的值会被自动转换成Infinity和-Infinity。
可以用isFinite()函数来判断一个数是否在最大和最小值之间。
(3) NaN
用于表示一个本来要返回数值的操作数未返回数值的情况。
任何值除以0都返回NaN。
NaN有两个特点,凡是涉及NaN操作的数会返回NaN; NaN和任何值都不等,包括自己。
例:alert(NaN==NaN)//返回false
最后提供isNaN()函数用于检测一个值是否“不是数值”。isNaN在接受到一个值时会自动尝试将其转换为数值。
例:alert(isNaN(NaN));//true
alert(isNaN(10));//false
alert(isNaN(“10”));//false
alert(isNaN(“yellow”));//true
alert(isNaN(“true”));//false
(4) 数值转换
数值转换提供3个函数,分别是Number(),parseInt(),parseFloat()。
Number()函数用于任何数据类型,有着如下转化规则:
Boolean值得true和false将分别被转换为1和0;
数字值只是简单的传入和返回;
null值返回0;
undefined返回NaN;
若是转字符串稍显复杂,这里不做具体的笔记了(P30)
例:var num1=Number(“hello”);//NaN
var num2=Number(“”);//0
var num3=Number(“000011”);//11
var num4=Number(true);//1
parseInt()和parseFloat()只针对字符串进行转换。对parseInt()函数来说,如果第一个字符不是数字字符或负号,返回值为NaN,也即parseInt()会转换空字符串为NaN,而Number()对空字符串返回0,若第一个是数字字符,则会接着解析下去到最后或遇到非数字字符为止,同时此函数提供有指定基数作为第二个参数的方式来指定解析格式。而parseFloat()函数的不同之处在于它解析字符串的第一个小数点是有效的,第二个开始为无效;parseFloat()函数会只解析十进制值,所以它会自动忽略字符串中前面的零。
例:var num1=parseInt(“1123yellow”);//1123
var num2=parseInt(“”);//NaN
var num3=parseInt(“0xA”);//10
var num4=parseInt(“22.5”);//22
var num5=parseInt(“070”);//56
var num6=parseInt(“AF”,16);//175
var num7=parseInt(“AF”);//NaN
var num8=parseFloat(“19yellow”);//19
var num9=parseFloat(“0xA”);//0
var num10=parseFloat(22.5.4);//22.5
var num11=parseFloat(000908.5);//908.5
l Sring类型
ECMAScript规定字符串可以由双引号(“)或单引号(‘)来表示。
(1) 字符字面量
也叫转义序列,用于表示非打印字符或具有其他用途的字符。例:
\n 换行 \t制表 \b空格 \r回车 \’单引号 \”双引号
\\ 斜杠 \unnnn Unicode字符
这些字符字面量将被作为一个字符来解析。
(2) 字符串特点
ECMAScript中字符串时不可变的,一旦创建,其值不会改变。
例:var lang=”java”;
lang=lang+”Script”;
在执行第二行时,首先创建一个能容纳10个字符的新字符串,然后再这个字符串中填充“java”和“Script”,最后销毁原来的字符串“java”和“Script”。
(3) 转换为字符串
除了null和undefined值外的其它类型值都有个toString()方法,通过传递基数,可以输出不同格式的字符串,不传参的话默认返回十进制字符串。
例:var num=10;
alert(num.toString());//”10”
alert(num.toString(2));//”1010”
alert(num.toString(16));//”a”
对于null和undefined类型值可用String()返回相应值。
例:var value1=null;
var value2;
alert(String(value1));//”null”
alert(String(value2));//”undefined”
l Object类型
ECMAScript中对象是一组数据和功能的集合。通过new操作符创建对象
例:var o=new Object();
Object类型所具有的任何属性和方法也同样存在于更具体的对象中。
n Constructor:保存用于创建当前对象的函数
n hasOwnProperty(propertyName):检查给定属性是否存在于当前对象中
n isPrototypeOf(object):用于检查传入对象是否是另一个对象的原型
n propertyIsEnumerable(propertyName):检查给定属性是否能使用for-in语句来枚举。
n toLocaleString()
n toString()
n valueOf()
注:ECMA-262中对象行为不一定适用于JavaScript其他对象,例如BOM和DOM中的对象(宿主对象)。
标签:
原文地址:http://www.cnblogs.com/half-controller/p/5518401.html