你的位置:首页 > Java教程

[Java教程]JS基本概念


ECMAScript中有5种简单数据类型(也成为基本数据类型): Undefined、Null、Boolean、Number、String;

1种复杂数据类型: Object,Object本质上是由一组无序的名值对组成的。

ECMAScript不支持任何创建自定义类型的机制,所有值最终都将是上述6种数据类型之一。

1.typeof操作符

 typeof操作符用来检测给定变量的数据类型。对一个值使用typeof操作符可能返回下列某个字符串:

  • undefined  ---  如果这个值未定义
  • boolean     ---  如果这个值是布尔值
  • string        ---  如果这个值是字符串
  • number     ---  如果这个值是数值
  • object       ---  如果这个值是对象或null
  • function    ---  如果这个值是函数
var message = "some thing";alert(typeof message);    //stringalert(typeof (message));   //string  typeof是操作符而不是函数,因此圆括号可以使用,但不是必须的alert(typeof 95);      //numberalert(typeof false);    //booleanalert(typeof null);     //object

2.Undefined类型

 Undefined类型只有一个值,即特殊值undefined。 在使用var声明变量但未对其加以初始化时,这个值就是undefined。

var message;alert(message == undefined);  //true

包含undefined值的变量与尚未定义的变量是不一样的:

var message;alert(message);  //undefined//下面这个变量并没有声明//var age;alert(age);    //Uncaught ReferenceError: age is not defined

对未声明的变量执行typeof操作符同样也会返回undefined

var message;alert(typeof message);  //undefined//下面这个变量并没有声明//var age;alert(typeof age);    //undefined

3.Null 类型

 Null类型只有一个值,这个特殊值是null。从逻辑角度看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值时会返回"object"的原因。

var car = null;alert(typeof car);  //object/* 如果定义的变量准备在将来用于保存对象, * 那么最好将该变量初始化为null * 这样一来,只要检查null值就可以知道相应的变量是否已经保存了一个对象的引用 */if(car != null){  //}

4.Boolean类型

 Boolean类型是ECMAScript中使用得最多的一种类型,该类型只有两个字面值:true 和 false。

 Boolean类型的字面值true和false是区分大小写的,True和False都不值Boolean值,只是标识符。

 虽然Boolean类型的字面值只有两个,但ECMAScript中所有类型的值都有与这两个Boolean值等价的值。

 要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()

var message = "Hello World";var messageAsBoolean = Boolean(message);alert(messageAsBoolean);  //true

  各种数据类型及其对应的转换规则

数据类型      
转换为true的值转换为false的值      
Booleantrueflse
String任何非空字符串""(空字符串)
Number任何非零数字值(包括无穷大)0 和 NaN
Object任何对象null
Undefined undefined

这些转换规则对理解流控制语句(如 if 语句)自动执行相应的Boolean转换非常重要:

var message = "Hello World";if(message){  alert("Value is true");}

5.Number类型

 Number类型使用IEEE754格式表示整数和浮点数值。为支持各种数值类型,ECMA-262定义了不同的数值字面量格式。

var intNum = 55;  //十进制整数/* *八进制字面值的第一位必须是零(0),然后是八进制数字序列(0~7)。 *八进制字面量在严格模式下是无效的 */var octalNum1 = 070;  // 八进制的56var octalNum2 = 079;  // 无效的八进制数值 --- 解析为79var octalNum3 = 08;    // 无效的八进制数值 --- 解析为8/* *十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0~9 A~F) *字母可以大写,也可小写 */var hexNum1 = 0xA;    //十六进制的10var hexNum2 = 0x1f;    //十六进制的31/*在进行算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制*/

/*浮点数值*/var floatNum1 = 1.1;var floatNum2 = 0.1;var floatNum3 = .1;    // 有效,但不推荐var floatNum4 = 1.;    //小数点后面没有数字 -- 解析为1var floatNum5 = 10.0;  //整数 -- 解析为10

5.1数值范围

  ECMAScript能够表示的最小数值保存在Numer.MIN_VALUE中,最大值保存在Number.MAX_VALUE中。

alert(Number.MIN_VALUE);  //5e-324alert(Number.MAX_VALUE);  //1.7976931348623157e+308

如果某次计算结果得到了一个超出JavaScript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值。

具体来说,如果这个数值是负数,则会被转换成-Infinity。如果是正数,则会被转换成Infinity。

Infinity不是能够参与计算的数值,可以使用isFinite()函数确定数值是否位于有效区间内。

var max = Number.MAX_VALUE * Number.MAX_VALUE;var min = - Number.MAX_VALUE;alert(isFinite(max));  //falsealert(isFinite(min));  //true

5.2 NaN

  NaN,即非数值(Not a Number)是一个特殊值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。

  NaN 有两个非同寻常的特点:

  • 任何涉及NaN的操作都会返回NaN
  • NaN与任何值都不相等,包括NaN本身。
var num = 10*NaN;alert(num);    //NaNalert(NaN == NaN);  //false

ECMAScript定义了isNaN()函数,这个函数接收一个参数,该参数可以是任何类型。函数在接收到参数后会尝试将这个值转换为数值。不能被转换为数值的值将返回true

alert(isNaN(NaN));   //truealert(isNaN(10));   //false (10是一个数值)alert(isNaN("10"));  //false (可以被转换成数值10)alert(isNaN("blue")); //true (不能转换成数值)alert(isNaN(true));  //false (可以转换成数值1)alert(isNaN(false)); //false (可以转换成数值0)

5.3 数值转换

  有三个函数可以把非数值转换为数值:

  1. Number():可用于任何数据类型
    //1.如果是Boolean值,true -- 1; false --- 0alert(Number(true));  //1alert(Number(false));  //0//2.如果是数字值,只是简单地传入和返回alert(Number(10));  //10alert(Number(-10));  //-10//3.如果是null值,返回0alert(Number(null));  //0//4.如果是undefined,返回NaNalert(Number(undefined));  //NaN//5.如果是字符串,遵循下列规则//5.1 如果字符串只包含数字(包括前面带正号或负号的情况),则将其转换成十进制数值alert(Number("123"));  //123alert(Number("+011"));  //11 (前置0被忽略)alert(Number("-1993"));  //-1993//5.2 如果字符串中包含有效的浮点格式,则将其转换为对应的浮点数值alert(Number("1.1"));  //1.1alert(Number("01.1"));  //1.1alert(Number("-01.1"));  //-1.1//5.3 如果字符串中包含有效的十六进制格式,则将其转换成十进制整数值alert(Number("0xf"));  //15//5.4 如果字符串是空的,则将其转换成0alert(Number(""));  //0//5.5 如果字符串中包含除上述格式之外的字符,则将其转换成NaNalert(Number("blue"));  //NaNalert(Number("123blue"));//NaNalert(Number("blue123"));//NaN/* *6.如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。 * 如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值 */

  2. parseInt():把字符串转换成数值。在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN。
    //1.如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN。alert(parseInt(""));  //NaNalert(parseInt("xx999"));  //NaN//2.如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或遇到了一个非数字字符。alert(parseInt("999"));  //999alert(parseInt("-999"));//-999alert(parseInt("999aaa"));//999alert(parseInt(22.5));  //22//3.如果字符串中的第一个字符是数字字符,parseInt()也能够识别出各种整数格式alert(parseInt("0xA"));  //10 (十六进制)alert(parseInt("70"));  //70 (十进制)alert(parseInt("000"));  //0 (十进制)alert(parseInt("007"));  //7 (十进制)/* *4.在解析八进制字面量的字符串时,ECMAScript 3和5存在分歧 *ECMAScript3 认为是56(八进制), ECMAScript5认为是70(十进制) *可以为这个函数提供第二个参数:转换时使用的基数(即进制数) */alert(parseInt("070", 8));  //56 (八进制)alert(parseInt("0xAF", 16));  //175alert(parseInt("AF", 16));  //175 指定了进制数,可以省略0xalert(parseInt("10", 2));  //2alert(parseInt("10", 8));  //8alert(parseInt("10", 10));  //10alert(parseInt("10", 16));  //16

  3. parseFloat():从第一个字符(位置0)开始解析每个字符。一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。
    //1.字符串中的第一个小数点是有效的,第二个就无效了,因此他后面的字符串将被忽略。alert(parseFloat("22.34.5"));  //22.34//2.会忽略前面的0,只解析十进制数,没有第二个参数alert(parseFloat("098.5"));  //98.5alert(parseFloat("098.5Blue"));//98.5alert(parseFloat("098Blue.5"));//98alert(parseFloat("070.5"));//70.5alert(parseFloat("0Ax"));//0//3.如果字符串时一个可解析为整数的数,则返回整数alert(parseFloat("1234"));  //1234alert(parseFloat("1234Blue"));//1234