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 中的所有事物都是对象:字符串.数值.数组.函数...(内置对象),可以分为内置对象与自定义对象(通过对象构造器方式生成的)分 ...
一周排行
  • 超详细Centos6.5文本模式安装步骤
       对于刚接触Linux的用户来说,安装系统和配置网卡的过程也可能要用很长的时间,Cen ...
  • ASP.NETMVC视图(五)
    ASP.NET MVC 视图(五) 前言 上篇讲解了视图中的分段概念.和分部视图的使用,本 ...
  • 笔者的工作环境中有多台oracle 10G 数据库,都是清一色的64bit的,笔者所维护的oracle,如果非必要一般不会重启服务器,如果重启服务器,必须先要正确关闭oracle,然后在重启.  人无完人,总有人会犯 ...
  • 第一天上班,还算正常,这个年过的我实在想法太多,准备考研,同时也好好的工作,争取在本命年里工作,学习上有很大的收获.一定不能忘了目标,一定要好好的努力,目标:考研,如果是本专业,就会选择北邮为奋斗目标.第一天在51c ...
  • 首先祝大家新年快乐.身体健康,平安就是福气. 对于一般的个人迷你项目,数据量不大的时候,完全没有必要使用数据库,管理数据使用XML就可以了. 自己尝试写了一个XML数据库,插入1w条小记录,大概3M大小,然后将一半数 ...
  • 1.不需要rsync --daemon启动(安装后直接使用rsync命令)2.使用ssh加密传输3.双向同步:同步服务端中客户端没有的文件到客户端.同步服务端中更新时间晚于客户端中的文件到客户端.服端删除客户端不删除 ...
  • 用jdbc访问大段文本数据
    1 package it.cast.jdbc; 2 3 import java.io.Bu ...
  • 在使用springmvc:4.1.3版本的时候因为前台一直用的是html网页,而不是jsp,在web.xml中配置是这样的<servlet-mapping>        <servlet-name ...
  • 编写了十多年程序,更换了不少平台,也做了不少项目.总结一下,基本上不停地在学习应用总结这三个循环中逐步提高自己.简单的说,开发经验的提升,基本上逃不出这三个阶段:学习库测试库应用库解决实际问题总结一套库的使用经验,形 ...
  • windows下安装elasticSearch
    1.首先下载elasticsearch安装版本下载地址:http://www.elasti ...