JavaScript 数据类型

在javascript中,数据类型分为两类: 基本数据类型 和 引用数据类型 。javascript中声明变量使用关键字 var 。

一、基本数据类型

javascrip含有五种基本数据类型: undefined , null , boolean , number 和 string 。

  • boolean : 布尔,值为 truefalse
  • number :数字,值为任何整型会浮点数值
  • string :字符串,值为由单引号或双引号括出的单个字符或连续字符(JavaScript不区分字符类型)
  • null :空类型,其仅有一个值: null
  • undefined :未定义,其仅有一个值: undefined

typeof 关键字 :由于Javascript中的变量是松散类型的,所以它提供了一种检测当前变量的数据类型的方法,也就是 typeof 关键字,在上面提到的ECMAScript中的5种简单数据类型中(这5种只是 数据类型 ,代表一种数据类型,就想C#中的int,string类型一样),通过 typeof 关键字,对这5种数据类型会返回下面的值(以字符串形式显示)

  • “ boolean “ ——如果变量值为 布尔 类型;
  • “ number “ ——值为 数字 类型;
  • “ string “ ——值为 字符串 类型;
  • “ object “ —— 对象 或者 值为 null ;
  • “ undefined “ —— 未申明 ,或者变量的 值为undefined 或者 未初始化 ;

原始类型的值是直接保存在变量中,并可以用 typeof 进行检测。但是 typeof 对 null 的检测是返回 object ,而不是返回 null 。所以检测 null 时,最好用全等于( === ),其还能避免强制类型转换。

对于字符串、数字或者布尔值,其都有对应的方法,这些方法来自于对应的原始封装类型: String 、 NumberBoolean 。原始封装类型将被自动创建。例如:

var name = "Tom";
var char = name.charAt(0);
console.log(char);  // "T"

在JavaScript引擎中发生的事情:

var person = "Tom";
var temp = new String(person);
var char = temp.charAt(0);
temp = null;
console.log(char);  // "T"

字符串对象的引用在用完之后立即被销毁,所以不能给字符串添加属性,并且 instanceof 检测对应类型时均返回 false :

var person = "Tom";
person.age = 21;
console.log(person.age);   //undefined
console.log(person instanceof String);  //false

二、引用数据类型

引用类型 :保存为对象,实质是指向内存位置的引用,所以不在变量中保存对象。除了自定义的对象,JavaScript提供了多种内建类型。

Object 类型: Object 类型是Javascript引用类型的鼻祖了,就跟在C#和Java中是一样的道理,在创建Object类型的实例后可以为其添加属性和方法。

以 Object 为基础,JavaScript提供的内建类型如图所示:

  • Array :数组类型,以数字为索引的一组值的有序列表
  • Date :日期和时间类型
  • Error :运行期错误类型
  • Function :函数类型
  • RegExp :正则表达式类型

可以用new 来实例化每一个对象,或者用字面量形式来创建对象:

var obj = new Object();
var person = {
            name:"Tom",
            sex:"man",
            "my age":22
 };
console.log(person.sex);    //访问属性
console.log(person["my age"]); 
obj = null;  //解除引用

obj并不包含对象实例,而是一个指向内存中实际对象所在位置的指针(或者说引用)。因为 typeof 对所有非函数的引用类型均返回 object ,所以需要用 instanceof 来检测引用类型。

Object对象

对象是一种引用类型,创建对象常见的两种方式:Object构造函数和对象字面量形式:

var p1 = {
    name:"Tom",
    age:22
};
var p2 = new Object();
p2.name = "Jack";

在JavaScript中,可以随时为对象添加属性:

p1.age = 0;
p1.sayName = function(){
    alert(this.name);  
}
p1.sayName(); //"Tom"

检测属性是否存在时,有两种方式: in 和 hasOwnProperty() ,前者会检测原型属性和自有(实例)属性,后者只检测自有(实例)属性:

console.log("age" in p1);  //true
console.log(p1.hasOwnProperty("age"));  //true
console.log("toString" in p1);  //true
console.log(p1.hasOwnProperty("toString"));  //false

对象 p1 并没有定义 toString,该属性继承于Object,所以 in 和hasOwnProperty()检测该属性时出现差异.

若要删除一个属性,用 delete 操作符,用于删除自有属性,不能删除原型属性:

p1.toString = function(){
    console.log("p1对象");
};
console.log(p1.hasOwnProperty("toString"));   //true
p1.toString();   //"per1对象"
delete p1.toString;
console.log(p1.hasOwnProperty("toString"));   //false
console.log(p1.toString());  //[object Object]
坚持原创技术分享,您的支持将鼓励我继续创作!
0%