JavaScript的6种基本数据类型

文 / ChenMiaochun

JavaScript有7种数据类型,其中包括6种基本数据类型和1种引用类型(Object)。这篇文章主要讲讲JavaScript的6种基本数据类型和与基本类型相关的两种操作符typeof和比较操作符==和===。6种基本数据类型分别为:

    1、Number

    2、Boolean

    3、String

    4、Null

    5、Undefined

    6、Symbol

由于JavaScript(js)的设计者当初设计JavaScript的时候是参照Java来的,所以js有很多地方与Java相似,包括这里的基本数据类型。

Java的基本数据类型有4种,分别为整形,浮点型,布尔型以及字符型。

为什么是这四种呢?其实想一下就明白了,计算机刚开始是为了计算而被发明的,肯定包括整形和浮点型这两种关于计算的类型;另外字符型是因为计算机不仅仅用作计算,还可以展现很多信息,信息就是由字符构成的;最后为什么有布尔型,其实这跟我们计算的过程中的逻辑判断有关,我们现实世界也经常用到逻辑判断来交流,比如“如果今天不下雨我就出门玩”,这就是逻辑判断,计算机也一样,逻辑判断得到的值就用布尔型来表示。

js也差不多,用Number代表整形和浮点型,用Boolean代表布尔型,用String代表字符型和java中的String引用类型。

另外js还有3种数据类型,分别是Null,Undifined和Symbol。Symbol在ES6中新定义,符号类型是唯一的并且不可修改,这里不细讲。下面分别讲讲前面五种基本数据类型。

Number

js数字范围是 -(2的63次方-1) ~ (2的63次方-1) ,字面量除了具体的数值,还有三个特殊的值:+Infinity,-Infinity和NaN。这仨也是number类型,分别当计算为:19 /+0(或19/+0.0,下同), 19/-0, 0/0时取得。与Java不一样的是,Java是只有浮点型才会有这仨值+一个负零,分别是:19.0/0.0, -19.0/0.0, 0.0/0.0,,负零是:-19.0/inf。这仨示例如下(其中typeof操作符表示判断数据类型,最后会细讲):

var a = 19/+0; //或者19/+0.0,结果一样

var b = 19/-0;

var c = 0/0;

document.write(typeof a); //number

document.write(typeof b); //nunmber

document.write(typeof c); //number

document.write(a); //+Infinity(或Infinity)

document.write(b); //-Infinity

document.write(c); //NaN

Boolean

可以有两个值:true和false。这个与Java的一样。

String

第一个字符的下标为0,字面量为单引号或双引号括起来的值。

JavaScript 字符串是不可更改的。这意味着字符串一旦被创建,就不能被修改(因为我们如果var str = "abcdefg";str = "zzzz";其实是弄了个新值给它而不是修改它的值,这点应该跟java一样)。但是,可以基于对原始字符串的操作来创建新的字符串。

例如:获取一个字符串的子串可通过选择个别字母或者使用String.substr()。这个方法参数与Java的substring有些不一样。js的substr(开始index,长度),而Java的substring为(开始Index,结束Index(不包括结束的Index字符)),Java这么设计是方便计算截取的子串的长度,这样长度=endIndex - startIndex。但如果只传入一个参数,两者一样,都是(开始Index)。但js也有一个substring()方法跟Java的完全一样。

又例如:两个字符串的连接使用连接操作符 (+) 或者String.concat()。

Null

Null 类型只有一个值:null,表示空值,表示没有被呈现。

Undefined

一个没有被赋值的变量会有个默认值undefined。JavaScript的设计者希望用null表示一个空的值,而undefined表示值未定义。事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用null。undefined仅仅在判断函数参数是否传递的情况下有用。

操作符

这里讲讲两种操作符typeof和比较操作符(==和===)。

typeof

由于JavaScript是松散类型的,因此需要有一种手段来检测给定变量的数据类型——typeof就是负责提供这方面信息的操作符。

取值有:'undefined' —— 未定义,'boolean' —— 布尔值,'string' —— 字符串,'number' —— 数字值,'object' —— 对象或null,function —— 函数。举例如下:

typeof 'some string';    //string

typeof 95;    //number

typeof null;    //object

==和===

==会自动转换数据类型再比较,有时会有比较诡异的结果,而===不会转换数据类型,数据类型不一致时直接false,一致再比较。

如false == 0为true,false===0为false。

另外NaN与自己不相等,不管是NaN==NaN还是NaN===NaN都是false,这点与java一致。判断只能通过isNaN(NaN)来,这与Java的Float.isNaN()和Double.isNaN()一致。

最后注意浮点数的比较,如1 / 3 === (1 - 2 / 3); // false,这不是Js的错,这是计算本身的特性决定,所以要判断是否相等只能通过计算绝对值差值,如:Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true。

参考文章:廖雪峰的JavaScript教程中的数据类型和变量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容