JavaScript中的值类型详细介绍


Posted in Javascript onDecember 29, 2014

计算机程序的实质很大程度上可以说是机器对各种信息(值)的操作与读写。在JavaScript中,存在多种类型的值,这些值分成两大类:Primitive(基本类型)和Object(对象)。

Primitive

JavaScript中Primitive有5种类型:

1.Number。所有的数字,无论是整数还是小数,均为Number类型。
2.String。字符串类型。
3.Boolean。布尔类型,true或者false。
4.null。此类型只有null一个值。
5.undefined。此类型只有undefined一个值。

Object

除了Primitive,JavaScript中其它任何值均为Object(对象)。Object有以下几种:

1.JSON键值对对象。如{“name”:”Bob”, “age”:42}。
2.数组(array)。如[1,4,5,7,9]。
3.函数(function)。如function(){return true;}。在JavaScript中函数有两种存在形式:1. 可执行代码块;2. 类(Class)的构造器(constructor)。无论是以哪种形式存在,函数(function)始终都是对象。

JS自带全局对象

为了方便程序编写,JavaScript自带一个全局对象,该全局对象拥有以下7个成员变量,其类型均为Object:

1.Math。可以通过调用Math对象的方法来完成一系列复杂的数学运算。
2.Number。可以通过访问Number对象的成员变量来获取一些特殊值。
3.Array。数组对象的构造函数。
4.Function。函数对象的构造函数。
5.Date。日期对象的构造函数。
6.RegExp。正则表达式对象的构造函数。
7.Error。错误对象的构造函数。

在进行程序编写时,由于可以直接访问上述7个变量,因此也可以将它们当作全局对象来使用。

Immutable与Mutable

Primitive与Object有一个泾渭分明的特性:所有的Primitive都是Immutable的,所有的Object都是Mutable的。以String类型为例,调用String的方法对其进行编辑后,JavaScript会将编辑后的结果保存在一个新的String对象中,原String对象不会有任何改变:

var s = "test";

s.toUpperCase();//return a new String object "TEST"

console.log(s);//"test" -- original String s does not change

实验

在JavaScript中,可以通过使用typeof关键词来获取某个值的类型。

获取数字的类型:

var n = 42;

console.log(typeof n);

程序输出结果为number。

获取字符串的类型:

var s = "test";

console.log(typeof s);

程序输出结果为string。

获取布尔值的类型:

var b = true;

console.log(typeof b);

程序输出结果为boolean。

获取null的类型:

var x = null;

console.log(typeof x);

程序本应输出null,但实际上却输出object。原因在于,当对null值使用typeof操作时,程序将返回object:这是自JavaScript第一个版本以来就存在的一个bug。在ECMAScript标准的制定过程中,就是否修复这个bug存在过一些有趣的争论:http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null;最终结论为:修复该bug会给太多的网站带来问题,因此暂不修复。

获取undefined的类型:

var y = undefined;

console.log(typeof y);

程序输出结果为undefined。

获取JSON对象的类型:

var j = {"name":"Bob", "age":42};

console.log(typeof j);

程序输出结果为object。

获取数组对象的类型:

var a = [2,3,5,7,11];

console.log(typeof a);

程序输出结果为object。

获取函数对象的类型:

var f = function(){return true;};

console.log(typeof f);

函数对象比较特殊,typeof操作符返回结果为function。
Javascript 相关文章推荐
js实现addClass,removeClass,hasClass的函数代码
Jul 13 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
May 21 Javascript
node.js中的path.sep方法使用说明
Dec 08 Javascript
JS/Jquery判断对象为空的方法
Jun 11 Javascript
JavaScript包装对象使用详解
Jul 09 Javascript
JavaScript识别网页关键字并进行描红的方法
Nov 09 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
Nov 17 Javascript
JavaScript——DOM操作——Window.document对象详解
Jul 14 Javascript
Vue.js如何优雅的进行form validation
Apr 07 Javascript
详解AngularJS2 Http服务
Jun 26 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
Apr 13 Javascript
jQuery zTree如何改变指定节点文本样式
Oct 16 jQuery
JavaScript不使用prototype和new实现继承机制
Dec 29 #Javascript
JavaScript中的console.assert()函数介绍
Dec 29 #Javascript
jQuery中:eq()选择器用法实例
Dec 29 #Javascript
根据配置文件加载js依赖模块
Dec 29 #Javascript
JavaScript中的console.dir()函数介绍
Dec 29 #Javascript
JavaScript中的console.group()函数详细介绍
Dec 29 #Javascript
小米公司JavaScript面试题
Dec 29 #Javascript
You might like
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
php实现json编码的方法
2015/07/30 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
jQuery中document与window以及load与ready 区别详解
2014/12/29 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
[04:10]2018年度CS GO玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
关于python多重赋值的小问题
2019/04/17 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
非常漂亮的CSS3百叶窗焦点图动画
2016/02/24 HTML / CSS
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
设置器与访问器的定义以及各自特点
2016/01/08 面试题
中层干部培训方案
2014/06/16 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
关于读书的活动方案
2014/08/14 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
MySQL系列之十二 备份与恢复
2021/07/02 MySQL
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS