JavaScript中的数据类型

Javascript中的数据类型有以下几种情况:

基本类型:string,number,boolean

特殊类型:undefined,null

引用类型:Object,Function,Date,Array,RegExp, ...

string

string类型的数据是由16位Unicode字符组成的字符串,用typeof检测其数据类型如下:

var str = "Hi, Javascript";

console.log(typeof str); // string

在Javascript中,除过undefined和null之外的其他的数据类型都有toString()方法,因此这些数据类型都可以通过toString方法转化为对应的string类型。

123..toString(); // "123"

true.toString(); // "true"

new Object().toString(); // [object Object]

"Hello".toString(); //  "Hello"

undefined.toString(); // Error

null.toString(); // Error

一般情况下,toString 不需要传递参数,而将数值转化为字符串时,通过传递一个radix参数,可以将数值转化为对应的二进制、八进制和十六进制的字符串表示。

10..toString(2);  // 1010 二进制表示

10..toString(8);  // 12  八进制表示

10..toString(16); // a 十六进制表示

number

在Javascript中,没有int和float数据类型,而是用number来表示整数和浮点数值,除此之外,number还有一个特殊的数值,即NaN (Not a Number),NaN表示一个承诺返回数值类型数据但实际没有返回的情况。NaN有两个特点:一是任何涉及NaN的操作都会返回NaN,二是NaN不与任何数值相等,包括自己,但可以通过isNaN()方法来判断一个数值是否为NaN

typeof 123; // "number"

typeof 123.45 // "number"

typeof NaN; // "number"

NaN+1; // NaN

NaN == false; // false

NaN == NaN; //false

isNaN(NaN+1); //true

boolean

boolean类型只有两个字面值:true和false 。 但在Javascript中,所有类型的值都可以转化为与boolean等价的值,转化规则如下:

(1)所有对象都被当作 true,

(2)当字符串为空时,该字符串被当作false

(3)null 和 undefined 被当作 false

(4)当数字为0时,该数字被当作 false

typeof true; // "boolean"

typeof false; // "boolean"

Boolean(new Object()); //true

Boolean(undefined); //false

Boolean(null); //false

Boolean(''); //false

Boolean(0); //false

Boolean(100); // true

需要注意的是,平时我们看到的if(1) {...} ,实际上JS引擎在内部也对这些值做了boolean转化然后再进行运算的。

undefined

该类型只有一个值,即 undefined。 undefined意为`未定义`,即当使用var声明了变量但未进行复制时,这个变量的值就是undefined。undefined产生的原因有两种:

(1)访问对象不存在的属性或方法

(2)声明了变量但从未赋值

var v1,obj = {};

console.log(v1); //undefined

console.log(obj.get); //undefined

typeof v1; // "undefined"

typeof v2; // "undefined"

typeof obj.get; // "undefined"

null

null类型也只有一个值:null , 表示一个变量中没有包含有效数据。null在这里意为`空值`、`空对象`的意思,更确切的说,一个被赋值为null的变量没有保存有效的数值、字符串、布尔、数组或对象等,可以通过给一个变量赋值为null来清空变量中的内容。产生null的原因只有一个:即对一个变量显式的赋值为null 。

var p = null;

console.log(p); //null

typeof p ; // "object"

typeof null; // "object"

另外,需要注意的是,typeof null 应该返回`null`,但实际上返回的是`object`,这是一个历史遗留问题,并没有其他原因,不要想太多。

Object,Function,Array,Date,RegExp

这些对象在JS中都属于引用类型, 除Function之外,通过typeof检测其数据类型返回的都是object, 如果要判断对应的具体类型,则可以通过Object.prototype.toString来获取。

var a = {};
var b = new Function();
var c = [];
var d = new Date();
var e = new RegExp();

typeof a;  //object  有效
Object.prototype.toString.call(a); //[object Object]

typeof b;  //function 有效
Object.prototype.toString.call(b); //[object Object]

typeof c;  //object 无效
Object.prototype.toString.call(c);//[object Array]

typeof d;  //object 无效
Object.prototype.toString.call(d);//[object Date]

typeof e;  //object 无效
Object.prototype.toString.call(e);//[object RegExp]

by @一像素 2016.01

更多相关文章
  •     这篇文章通过四种方式获取Javascript中的数据类型:通过隐藏的内置[[Class]]属性:通过typeof运算符:通过instanceof运算符:通过函数Array.isArray().我们也会看看原型对象的构造函数,可能会有意想不到的数据类型结果.     [这篇文章是我在adobe ...
  • 1.typeof进行判断 typeof 是一个一元运算符,放在运算数之前,运算数可以是任意类型.它返回值是一个字符串,该字符串说明运算数的类型.typeof 一般只能返回如下几个结果: number.string.boolean.function.object.undefined.看下面例子: co ...
  • 1. 数据类型百度互联网技术官方博客]http://blog.csdn.net/baiduforum/article/details/5381869[关注百度技术沙龙]
  • 浅谈JavaScript中的函数问题
    前面的话:JavaScript可运行在所有主要平台的主流浏览器上,也可运行在每一个主流操作系统的服务器端上.所以呢,要想成为一名优秀的全栈工程师,必须懂得JavaScript语言.这是我整理的JS的部分函数问题,供大家参考借阅,有不妥的地方也请多多指教. 1.函数的三要素    1.1 函数的功能  ...
  • 缘由:    JS这个语言实在过于灵活,当然其不足之处也有很多.当今各种开源JS脚本铺天盖地,所以很多人的编程风格一下涌到你面前,特别是那些大师级的JS编码风格与技巧.    在最近分析NIKE这个网站源码时,看到了如下数组表达方式:// always trusted origins, can be ...
  • 在使用JavaScript进行开发的过程中,了解JavaScript内存机制有助于开发人员能够清晰的认识到自己写的代码在执行的过程中发生过什么,也能够提高项目的代码质量.其实关于内存的文章也有很多,写这篇文章也非"重弹老调",可以说是给自己理解的知识来一个总结,也顺便将知识分享给 ...
  • 来51cto已经很多年,就是没怎么写文字,今天来一篇介绍JS的,文章篇幅不是很大,大部分内容是我参考了别人的博客后经过自己理解,自己整理的.方便自己以后回顾知识.文中涉及到javascript中的Array对象的slice().call().apply();slice()方法,在我之前做的项目中,有 ...
  • JavaScript在线编辑与测试地址:http://www.w3school.com.cn/tiy/t.asp?f=js_create_object2 JavaScript 中的所有事物都是对象:字符串.数值.数组.函数...(内置对象),可以分为内置对象与自定义对象(通过对象构造器方式生成的)分 ...
一周排行
  • 声明:鉴于本文篇幅比较长,为了不让广大博友产生阅读疲劳,所以进行了分割,如果要全篇阅读文章,请点击文章底部的链接,对此产生的不便,深表抱歉. 2.2 1.首先我们开始查看一下122这台机器是否工作组,如下图2.2.1 ...
  •  Linux下随机启动程序介绍 -----------------------------------------------------------------Linux下随机启动程序必启服务1.atd 运行用户用 ...
  • office2003安装:错误1303解决方法
          前段时间装了ms office2003,后来卸掉换了wps 2007,最近要用 ...
  • 离职旅行
    其实这篇文章早在8月初就应该发出,但是由于家里的网络问题,导致提交失败,最后写的内容全部付 ...
  • Hyper-V虚拟化测试22使用SMB共享创建虚拟机
    要做到虚拟机的快速实时迁移,我们就需要把虚拟机磁盘存放在共享路径下,例如共享存储,但是在W ...
  • VPN是Virtual Private Network的缩写,中文译为虚拟专用网.Virtual Network的含义有两个,一是VPN是建立在现有物理网络之上,与物理网络具体的网络结构无关,用户一般无需关心物理网络 ...
  • C:\>eventtriggersINFO: No event triggers found.C:\>eventtriggers /create /tr Mytrigger /tk notepad.exe ...
  • 一.Nginx安装安装的时候需要注意加上 --with-http_ssl_module,因为http_ssl_module不属于Nginx的基本模块.Nginx安装方法:./configure --user=user ...
  •    中国工程建设标准化协会信息通信专业委员综合布线工作组做为中国智能建筑综合布线行业的标准规范化.技术创新化的主要推动组织,于2008年3月立项,编制<住宅布线系统工程技术规程>CECS008 ...
  • .带上此链接:查阅所有接龙>> 上一篇 天涯小窝:[url]http://cdmatong.blog.51cto.com/13419/33914[/url] 最近为了备考,总是过着美国时间.今天" ...