JavaScript 数据类型

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

一、基本数据类型

javascrip含有五种基本数据类型:undefinednullbooleannumberstring

  • boolean:布尔,值为 true 或 false
  • 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 时,最好用全等于(===),其还能避免强制类型转换。

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

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

在JavaScript引擎中发生的事情:

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

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

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

二、引用数据类型

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

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

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

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

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

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

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

Object对象

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

1 var p1 = {
2     name:"Tom",
3     age:22
4 };
5 var p2 = new Object();
6 p2.name = "Jack";

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

1 p1.age = 0;
2 p1.sayName = function(){
3     alert(this.name);  
4 }
5 p1.sayName(); //"Tom"

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

1 console.log("age" in p1);  //true
2 console.log(p1.hasOwnProperty("age"));  //true
3 console.log("toString" in p1);  //true
4 console.log(p1.hasOwnProperty("toString"));  //false

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

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

1 p1.toString = function(){
2     console.log("p1对象");
3 };
4 console.log(p1.hasOwnProperty("toString"));   //true
5 p1.toString();   //"per1对象"
6 delete p1.toString;
7 console.log(p1.hasOwnProperty("toString"));   //false
8 console.log(p1.toString());  //[object Object]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏全沾开发(huā)

学习zepto.js(对象方法)[6]

学习zepto.js(对象方法)[6] first: 获取当前对象集合中的第一个dom元素。 $("div").first();// ...

3638
来自专栏程序员互动联盟

【编程基础】C语言指针函数和函数指针

往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂。下面详细为大家介绍C语言中指针函数和函数指针。 一、指针函数 当一个函数声明其返回值为一个指针时,实...

45110
来自专栏王磊的博客

es6分享——变量的解构赋值

变量的解构赋值:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 以前的写法: var a = 1;...

2897
来自专栏编程

PYTHON数据类型

Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Sets(集合) Dictiona...

2196
来自专栏mwangblog

python元组(Turple)

1775
来自专栏Python小屋

Python扩展库numpy中的布尔运算

首先解答上一篇文章Win10系统配置Python3.6+OpenGL环境详细步骤中的问题。该问题的答案为[2, 2],要点在于列表对象的方法index()默认是...

3389
来自专栏lonelydawn的前端猿区

java进阶的16个知识点

1.float 类型在java中占4个字符,long类型在java中占8个字符,为什么float类型比long类型取值范围大? float   32位二进制码...

2067
来自专栏IMWeb前端团队

创建对象模式

创建自定义对象最简单的一个方式就是创建一个Object实例: //简单的创建对象方式 var person=new Object(); ...

2157
来自专栏Golang语言社区

转--Golang语言--复合数据

1、array 数组的类型格式为单个数据单元类型+长度构成,如 [2]int,其中 [2] 代表数组的长度,而 int 代表每个单元都是整形。 数组的元素操作也...

3405
来自专栏进击的君君的前端之路

正则表达式

1765

扫码关注云+社区

领取腾讯云代金券