原文:JavaScript基础:数据类型的中的那些少见多怪

Javascript共有6种数据类型,其中包括3个基本数据类型(string,number,boolean)、2个特殊数据类型(undefined,null) 和 1个引用类型 (object) 。本篇文章将对这6种数据类型一一进行讲解,以加深对这些基础概念的理解和应用。

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


对象实际上是一组数据和功能的集合,在一切皆为对象的JS中,object处于原型链的最顶端,表示着原型链的终结,因此,可以说object是JS中所有对象的`祖宗`。

var o1 = {};
var o2 = new Object();
var date = new Date();
var arr = [1,2,3]; typeof o1 ; // "object"
typeof o2 ; // "object"
typeof date ; // "object"
typeof arr ; // "object"

by @一像素 2016.01

欢迎转载和分享,但请注明出处和连接。

JavaScript基础:数据类型的中的那些少见多怪的更多相关文章

  1. JavaScript基础——数据类型

    JavaScript使用数据类型来确定如何处理被分配给一个变量的数据.变量的类型决定了你可以对变量进行什么操作,如循环或者执行.下面描述了最常用的变量类型. 字符串(String):此数据类型将字符数 ...

  2. javascript基础数据类型与引用类型

    javascript一共有6种数据类型 有5种基本类型:Null,String Number,Boolean,Undefined 和一种引用类型Object 基础类型在内存中存在于栈空间中,例如 va ...

  3. JavaScript基础数据类型(一)

    动态类型 JavaScript 是一种弱类型或者说动态语言.这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定.这也意味着你可以使用同一个变量保存不同类型的数据: var foo = ...

  4. Javascript基础--数据类型

    一.基本数据类型 1.字符类型:表示字符的类型,例:'aaa',"aaaa",'123456',''(空字符) 2.数字类型:表示数字的类型,例:0,1,3.1415936等 特殊 ...

  5. JavaScript基础&实战 JS中正则表达式的使用

    文章目录 1.正则表达式 1.1 代码 1.2 测试结果 2.splict | search 2.1 代码 2.2 测试结果 1.正则表达式 1.1 代码 <!DOCTYPE html> ...

  6. JavaScript基础数据类型

    一.数值 1.JavaScript不区分整型和浮点型,就只有一种数字类型 2.还有一种NaN,表示不是一个数字(Not a Number) eg: parseInt("ABC")  ...

  7. JavaScript基础知识整理(2)

    15.处理图像 注意:(1)在写js文件时,尽量将函数的声明往后写,将函数调用写在前面,这样能够使代码结构很清晰. (2)一个网页中翻转器一般超过3个,所以使用for循环减少重复使用翻转器代码的次数. ...

  8. JavaScript基础系列目录(2014.06.01~2014.06.08)

    下列文章,转载请亲注明链接出处,谢谢! 链接地址: http://www.cnblogs.com/ttcc/tag/JavaScript%20%E5%9F%BA%E7%A1%80%E7%9F%A5%E ...

  9. 1--Python 入门--Python基础数据类型

    一.Python基础语法 初次使用Python,首先要明确三点: Python的标识符(例如变量名.函数名等),可用字母.数字和下划线构成,不能以数字开头,且区分大小写. Python对于缩进敏感.在 ...

随机推荐

  1. web.xml(7)_mime-mapping、welcome-file-list、error-page

    10.mime-mapping:mime-mapping包括两个子元素extension和mime-type.定义某一个扩展名和某一MIME Type做对映. MIME(Multipurpose In ...

  2. hdu 2222 Keywords Search ac自己主动机

    点击打开链接题目链接 Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  3. Windows内核之线程的调度,优先级,亲缘性

    1 调度 Windows不是实时操作系统,它是抢占式多线程操作系统.在如果全部优先级同样的情况下,CPU对线程的调度原则是每隔20m就会切换到下一个线程,依据Context中的IP和SP来接着运行上次 ...

  4. Java读取WEB-INF目录下的properties配置文件

    如何在Java代码中读取WEB-INF目录下的properties配置文件,下文给出了一个解决方案. 我们习惯将一些配置信息写在配置文件中,比如将数据库的配置信息URL.User和Password写在 ...

  5. A different twist on pre-compiling JSPs--reference

    I’ve blogged about this topic earlier and expressed my frustrations as to how web containers don’t p ...

  6. WebLogic: The Definitive Guide examined WebLogic's security mechanisms--reference

    reference from: http://www.onjava.com/pub/a/onjava/excerpt/weblogic_chap17/index1.html?page=1 ...... ...

  7. cookingk配置项中的chunk:true含义

    学习cooking,查看中文文档,发现有个配置chunk: true, 不明白具体含义,于是根据注释,找到了相关代码, 即chunk: true等同于以下代码: var webpackConfig = ...

  8. unity介绍

  9. iOS进度指示器——NSProgress

    iOS进度指示器——NSProgress 一.引言 在iOS7之前,系统一直没有提供一个完整的框架来描述任务进度相关的功能.这使得在开发中进行耗时任务进度的监听将什么麻烦,在iOS7之后,系统提供了N ...

  10. htmlentities() 函数

    Definition and Usage定义和用法 The htmlentities() function converts characters to HTML entities.htmlentit ...