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 中的所有事物都是对象:字符串.数值.数组.函数...(内置对象),可以分为内置对象与自定义对象(通过对象构造器方式生成的)分 ...
一周排行
  • 一.cat命令查看文本内容cat /etc/passwd使用这条命令会立即讲文本内容一股脑的显示出来,在虚拟终端下讲不能看到上一页的内容,所以非常不友好,这条命令使用的比较少.二.使用more或者less命令查看文本 ...
  •     2012年2月,我来到深圳为自己找实习单位:当时很迷茫,遗憾的是现在依然觉得很迷茫.参加工作以来,每天忙碌着,却又不知道自己在忙碌什么.回头一望,觉得工作没给自己留下什么,突然觉得很害怕.害怕有一天自己会被淘 ...
  • IDC评述网(idcps.com)07月03日报道:根据市场研究公司Net Applications最新数据显示,在6月份,全球搜索引擎市场份额冠军依然是Google – Global,占据70.80%的市场份额,环 ...
  •      今天有点累,不想看书了!随便这里写一下我的学习感受把!这个博客至今差不多开通也有一年了!也没有正儿八经的在这里写过自己的东西,感到很不好意思!     首先,感谢51cto 网站的朋友们,让我在这里学到很多 ...
  • 插件介绍:有时候我们使用网络时速度时慢时快,当想知道速度多少,使用下载工具又相对麻烦,今天为大家推荐一个简单的网速测试插件.速度测试(speed test)可以立即检查您的上网速度,免费上网速度测试,检查上传/下载速 ...
  • 虚拟化与云计算什么是虚拟化?虚拟化的本质都是将现有的计算机资源通过虚拟化的技术分割成若干个计算机资源,这些计算机资源相互独立最终目的是提高计算机的利用率和使计算机的灵活性最大化虚拟化的目的IT基础设施和资源管理方式的 ...
  • Maya脚本——重命名物体的名称
     该脚本用于将图1中的命名变更为图2中的,把maya中使用相同名称的物体都重命名为不同的名 ...
  • Exchange2010SP1针对邮件组仲裁实验
    以下是我以第一次实验的时候,做组的仲裁实验截图,由于分辨率设置的太高了,所以压缩以后图片是 ...
  • 有多种方式来保护你的计算机免受恶意软件的侵害,比如软件防火墙,病毒和Rootkit检测软件等.所有这些防护软件都基于一些众所周知而几乎没有改进的 技 术,而且这些技术你也许已经知道,继承这些技术的安全产品也是不完善的 ...
  •      在Azure Services Platform上对于工作流服务的支持,一直是我很感兴趣的内容.当然也是疑问比较多的领域.鉴于这方面的资料太少,所以今天就从AzureServicesKit中的一个DEMO出 ...