JavaScript高级程序设计(三):基本概念:数据类型

时间:2024-05-04 13:35:20

特别注意: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()方法的返回值相同。