数据类型

来源:互联网 发布:mac 打开icloud 编辑:程序博客网 时间:2024/03/29 07:45
  • 针对原始类型数据,使用值传递方式;
  • 针对引用类型数据,使用址传递方式。

一、Undefined类型

Undefined只有一个值,即undefined。在使用var声明变量,但没有对其初始化时,这个变量的值就是undefined。

因为没有初始化的变量会隐时的(自动的)赋值undefined,因此我们没有必要显示的给一个变量赋值为undefined

未初始化的变量未声明的(不存在的)变量也是不一样的:
var a;
alert(typeof a);
alert(typeof b); //都返回undefined,但从逻辑上思考,他们的值,一个是undefined,一个报错;他们的类型都是undefined。所以,我们在定义变量时尽可能的不要只声明,不不赋值。

二、Null类型

Null只有一个值,即null。表示一个空对象引用(指针),而typeof操作符会返回object。如果定义的变量准备在将来用于保存对象那么最好将变量初始化为null。这样,当检查null值就知道变量是否已经分配对象引用了。

var a = null;//表示还没有创建对象,但先声明了对象引用而必须初始化的结果(即还没来得及创建对象,先声明一个对象的变量放在那边,默认初始化为null)。if(a != null) {        //a != null 说明不是空对象alert("对象已经创建成功!");    //打印不出来} 例:var a;a = {    1:1};alert(a);

当我们之后需要用到变量但又不知道给它初始化什么值时:

var a = null;   //对象初始化,一般用null;var a = "";     //创建一个字符串变量,但一开始不知道初始化什么字符串,所以给他一个空字符串;var a = 0;      //数值初始化,一般用0;var a = false;  //布尔值初始化,一般一开始用false或者true;

需要注意的是:undefined是派生自null的,因此ECMA-262规定对他们的相等性测试返回true。

alert(undefined == null);   //true    undefined为未定义,null为空。都是为空,所以它们是相等的。alert(undefined === null);  //false   全等必须要数据类型也要相等才可以。alert(typeof undefined == typeof null);   //false 

三、Boolean类型

Boolean类型有两个值(字面量):true和false。**true不一定等于1,false也不一定等于0。**JavaScript是区分大小写的,True和False或者其他都不是Boolean类型的值。

console.log( true === 1); //falseconsole.log(typeof true == typeof 1); //false

虽然Boolean类型的字面量只有true和false两种,但ECMAScript中所有类型的值都有雨这两个Boolean等价的值。要将一个值转换为其对应的Boolean值,可以使用转型函数Boolean()。

var a = "hi";var a1 = Boolean(a);console.log(a1); //trueconsole.log(typeof a1); //boolean

上面是一种显示转换,属于强制性转换。而实际应用中,还有一种隐式转换。比如,在if条件语句里面的条件判断,就存在隐式转换。

以下是其他类型转换为Boolean类型规则 数据类型 转换为true 转换为false Boolean true false String 任何非空字符串 空字符串 Number 任何非零数字值(包括无穷大) 0和NaN Object 任何对象 null Undefined undefined

四、Number类型

Number类型包含两种数值:整型和浮点型(在某些语言中也称为双精度数值)。为了支持各种数值类型。ECMA-262定义了不同的数值字面量格式。

1、整型:

  • 最基本的数值字面量是十进制整数。
  • 八进制字面量,(以8为基数),前导必须是0,八进制数字序列(0~7)。八进制字面量在严格模式下是无效的

    var a = 074;  //输出十进制数值60var b = 079;  //无效八进制,输出十进制数值79
  • 十六进制字面量,前两位必须为0x,后跟任何十六进制数字(0~9及A~F)
    在进行算术计算时,所有八进制和十六进制表示的数值最终都将被转换为十进制数值。

2、浮点型

数值中必须包含一个小数点。

var a = 0.7;var a = .7; //有效,但不推荐var b = 07.9;

由于保存浮点数值需要的内存空间比整型数值大两倍,因此ECMAScript会不失时机地将浮点数值转换为整数。

var a = 7.; //小数点后面没有值,转换为7var a = 7.0; //小数点后面为0,转换为7

对于那些过大或过小的数值,可以用e表示法(即科学计数法)表示的浮点数值表示。
用e表示发表示的数值等于e(大小写都可)前面的数值乘以10的指数次幂。

var a = 4.12e9; //4120000000var a = 0.00000421; //0.00000421var a = 42.1e-10; //4.21e-9

虽然浮点数值的最高精度是17位小数,但算术运算中可能会不精确。(判断时最好使用整型判断)

3、数值范围

Number.MIN_VALUE; 最大数值。

Number.MAX_VALUE; 最小数值。

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

超出数值范围时会返回:Infinity 和 -Infinity

console.log(100e10000000); //Infinityconsole.log(-100e10000000); //-Infinity

查看正、负无穷Infinity 和 -Infinity值

Number.POSITIVE_INFINITY;

Number.NEGATIVE_INFINITY;

console.log(Number.POSITIVE_INFINITY); //Infinityconsole.log(Number.NEGATIVE_INFINITY); //-Infinity

函数isFinite(),查看数值是否在范围内

4、NaN

NaN表示一个本来要返回数值的操作数未返回数值的情况。任何值除以0都会返回NaN。

NaN有两个特点:1、任何与NaN进行运算的结果都为NaN;2、NaN与任何值都不想等,包括NaN本身。

ECMAScript提供了isNaN()函数,判断是否是非数值。

isNaN()在接收到一个值后,会尝试将这个之转换为数值。(true转换为1,false转换为0,数值字符串转换为数值)

5、数值转换

非数值转换为数值(方法) Number() 用于任何类型数据 parseInt() 只能用与字符串,其他都返回NaN parseFloat()

Number()转换规则:

  • 如果是Boolean值,ture和false将分别转换为1和0;
  • 如果是数字值,则只是简单的传入和返回。
  • 如果是null值,则返回0;
  • undefined,返回NaN;
  • 如果是字符串:

    只包含数字 —— 转换为十进制和十六进制(无八进制);

    “”空字符串——0;// parseInt()和parseFloat()转换为NaN

    其他——转换为NaN。

    parseInt(需判断的字符串,基数):console.log(parseInt("110",2)); //6 (按二进制解析)console.log(parseInt("110",8)); //72 (按八进制解析)console.log(parseInt("110",10)); //110 (按十进制解析)console.log(parseInt("110",16)); //272 (按十六进制解析)

    不指定基数意味着让parseInt()决定如何解析输入的字符串,因此为了避免错误的解析,建议无论在什么情况下都明确指定基数

五、String类型

1、字符字面量(又称转义序列)

字面量 含义 \n 换行 \t 制表 \b 退格 \r 回车 \f 进纸 \\ 斜杠 \’ 单引号,在单引号表示的字符串中使用。例如:’He said,\’hey.\” \” 双引号,在双引号表示的字符串中使用。例如:”He said,\”hey.\”“ \xnn 以十六进制代码nn表示的一个字符(其中n为0~F)。例如:\x41表示”A” \unnn 以十六进制代码nn表示的一个Unicode字符(其中n为0~F),例如:\u03a3表示希腊字符Σ
var a = "s\u03a3";console.log(a); //返回sΣconsole.log(a.length); //返回2【其中\u03a3被转移为一个字符】

2、转换为字符串

两种方法:

  • 1、toString()方法

    几乎每个值(除了null和undefined)都有的toString()方法
    使用此方法时,多不必传参。但是,在调用数值的toString()方法时,可以传数值输出的基数(默认一十进制输出)。

    var a = 456;console.log(a.toString(2)); //输出111001000
  • 2、强制转换 String()

    这个函数可以将任何类型的值转回为字符串。

六、Object类型

var foo = null;//表示还没有创建对象,但先声明了对象引用而必须初始化的结果(即还没来得及创建对象,先声明一个对象的变量放在那边,默认初始化为null)。var foo = {};

属性和方法:

  • constructor;保存用于创建当前对象的函数(原型对象都包含一个指向构造函数的指针(constructor属性));
  • hasOwnProprety(prototypeName);用于检查给定的属性在当前对象实例中(而不是对象原型中)是否存在。(作为参数的属性名必须以字符串形式指定。)
  • isPrototypeOf(object);用于检查传入的对象是否是传入对象的原型。
  • propertyIsEnumerable(propertyName);用于检查给定的属性是否能够使用for-in语句来枚举。
  • toLocaleString();返回对象的字符串表示,该字符串与执行环境的地区对应。
  • toString();返回对象的字符串表示。
  • valueOf();返回对象的字符串、数值、或布尔值表示。通常与toString()方法的返回值一样。

由于在ECMAScript中Object是所有对象的基础,因此所有对象都具有这些基本的属性和方法。

0 0