特别注意:ECMAScript是区分大小写的。
一、变量
1、ECMAScript的变量是松散型的。所谓松散型就是可以用来保存任何类型的数据。即每个变量仅仅是一个用于保存值的占位符而已。定义变量时要使用var操作符,后跟变量名。
注意:省略var操作符,从而可以创建一个全局变量。不推荐这样的做法。
2、多个变量定义,用多个逗号隔开即可:
var messgage='',
content=,
example=false;
二、数据类型
ECMAScript有五种简单【基本】数据类型:undefined、null、Boolean、String、Number。还有一种复杂的数据类型:Object。Object是由一组无序的名值对组成的。ECMAScript不支持任何创建自定义类型的机制。而所有值最终都将是上述6中数据类型之一。
(一)、typeof操作符
typeof用来检测变量的数据类型。对一个值使用操作符typeof可能返回下列某个字符串:
“undefined”:该值未定义;
“boolean”:该值是布尔值;
“string”:该值是字符串;
“number”:该值是数值;
“object”:该值是对象或null;
“function”:该值是函数。
具体的用法:
var message='';
alert(typeof (message));
alert(typeof message);
alert(typeof );
这几个例子说明,typeof操作符的操作数可以是变量,也可以是数值字面量。注意:typeof是一个操作符而不是函数。所以圆括号可以使用,但是不是必需的。
特殊点:typeof null会返回“object”,因为特殊值null被认为是一个空的对象引用。Safari5及之前版本、Chrome7及之前版本会返回“function”,其他浏览器都会返回“object”。
(二)、数据类型的关键点
1、未初始化的变量默认取得undefined值。
Number
2、Number类型分为整数型和浮点型【即双精度数值】。保存浮点类型数值需要的内存空间是保存整数型数值的两倍。因此ECMAScript会不遗余力的将浮点类型转换为整数类型。
3、极大或极小的浮点值,可以用科学计数法e来表示。例如:
var f=3.25e5;<======>var f=325000
var m=0.00003; <=======>var m=3e-5;
4、浮点值最高精度是17位小数。但在进行算术计算时,其精度远远不如整数。例如:0.1+0.2的结果不是0.3 ,而是0.30000000000000004。
5、Js由于内存的限制,不能保存世界上所有的数值。最小数值保存在Number.MIN_VALUE,最大数值保存在Number.MAX_VALUE.若超出Number.MIN_VALUE,返回-infinity;超出Number.MAX_VALUE返回Infinity【正无穷】。
6、判断一个数值是否超出了JS的数值范围,可以isFinite()方法:
var result=Number.MAX_VALUE+Number.MAX_VALUE;
console.log(isFinite(result)); //false
NaN
7、NaN表示一个本来要返回数值的操作未返回数值的情况【这样就不会报错了】。
8、NaN有两个特点:首先:任何涉及NaN的操作都会返回NaN; 其次,NaN不等于任何值,包括自己本身。
alert(NaN==NaN); //false
9、针对NaN的两个特点,ECMAScript制定了isNaN()【“不是数值”】的方法,判断一个参数是否不是数值。也可以用于对象的判断。具体的解析情况:
alert(isNaN(NaN)); //true (NaN不是数值)
alert(isNaN()); //false
alert(isNaN("")); //false("10"可以被转换为数值)
alert(isNaN("hello")); //true("hello"可以被转换为数值)
alert(isNaN(true)); //false(true可以被转换为数值:1)
10、将非数值转换为数值的三个方法:Number()、 parseInt()、parseFloat()。
11、Number()转换为数值的规则:
1)Boolean转换为0和1;
2)空字符串、null转换为0;undefined转换为NaN;
3)整数数值和浮点数值,简单的传入和返回;
4)若字符串包含十六进制格式,例如:“0xf”,则转换成相同大小的十进制数值;
5)其他无法转换的返回:NaN;
6)对象也可以进行转换。原理是:调用对象的valueOf()方法,然后转换。
var num1=Number('hello'); //NaN
var num2=Number(""); //
var num3=Number('true'); //NaN (boolean字符串转换不了)
var num4=Number(true); //
var num5=Number(""); //0
var num6=Number('01.230'); //1.23
注意:处理整数类型的转换,最常使用的是:parseInt();
12、parseInt()数值转换规则:
1)更多看其符合数值模式;
2)忽略字符串前面的空格,从第一个非空字符开始进行识别转换;
3)若第一个非空字符不是负号或不是数字,parseInt()会返回NaN,【即parseInt()在解析空字符串时候,返回的是NaN】;
4)parseInt()是一个字符一个字符解析字符串,直到解析完字符串或者遇到一个非数字字符。
5)若字符串第一个字符是数字字符,parseInt()也能够识别出各种整数格式(十进制、八进制【以0开头】、十六进制【以0x开头】);
eg:
var num1=parseInt(''); //NaN (空字符)
var num2=parseInt('1234hello'); //
var num3=parseInt('22.3'); //
var num4=parseInt('he220'); //NaN
var num5=parseInt(''); //56(八进制)
var num6=parseInt(''); //
var num7=parseInt('0xf'); //15(十六进制数)
注意点:parseInt()在解析八进制的时候,ECMAScript3 和5存在歧义。
var num=parseInt(''); //ECMAScript 3认为是 56(八进制);但是ECMAScript 5认为是:70(十进制)
原因是:ECMAScript 5 JS引擎中,parseInt()不再具有解析八进制的能力,因此,会认为前面的0是无效的。
解决之法是:parseInt()方法增加了第二个参数,表示转换时使用的基数(即多少进制)。
eg:
var num=parseInt('0xf',); //15 //如果指定具体的基数,字符串可以不用带‘0x’;不指定的话,会返回NaN。如
var num2=parseInt('f',); //
var num3=parseInt('f'); //NaN
指定具体基数,会影响字符串转换的结果:
var num1=parseInt('',); //2 (二进制)
var num1=parseInt('',); //8(八进制)
var num1=parseInt('',); //10(十进制)
var num1=parseInt('',); //16(十六进制)
友情提示:为了避免错误的解析,我们在使用parseInt()时候,要制定具体的基数。
13、parseFloat()的解析规则:【解析原理同parseInt()】
1)十六进制的字符串,始终会解析成0;
2)始终会忽略前导0,不管是十进制还是八进制;
eg:
var f1=parseFloat('120hel'); //120(整数)
var f2=parsetFloat('0xf'); //0(十六进制始终解析为0)
var f3=parsetFloat(''); //NaN(同parseInt())
var f4=parseFloat(09.230); //9.23
var f5=parseFloat(''22.3.); //22.3
String
1、转换为字符串的方法:toString() 和String();
2、数字、布尔类型、对象和字符串都有toString()方法,但是null和undefined没有toString()方法;
3、数字的toString()方法可以传递一个参数,表示转换的基数。【默认的基数是10,即十进制】eg:
var num=;
num.toString(); // '10'
num.toString(); // '1010'
num.toString(); // '12'
num.toString(); // '10'
num.toString(); // 'a'
4、String()转换规则:
1)有toString(),调用并转换返回;
2)null,返回“null”;
3)undefined,返回“undefined”
Object
1、ECMAScript中的对象是一组数据和功能的集合。用关键字new创建对象。
2、Object是所有对象的基础。Object类型具有的属性和方法同样存在于更具体的对象中。Object的每个实例都具有下列属性和方法:
1)Constructor:保存着用于创建当前对象的函数。
2)hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在(而不是存在于实例原型中);参数propertyName必须以字符串的形式指定。
3)IsPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型。
4)propertyIsEnumerable(propertyName):用于检查给定的属性是否能够用for……in语句来枚举。参数必须是字符串形式
5)toLocalString():返回对象的字符串表示,该字符串与执行环境的地区对应。
6)toString():返回对象的字符串表示。
7)valueOf():返回对象的字符串、数值或布尔表示。通常与toString()方法的返回值相同。