JS 数据类型

JavaScript 共有7种数据类型,分别是

  • 数值(number):整数和小数如 1,1.2等
  • 字符串(string):文本如 “JavaScript”等
  • 布尔值(boolean):只有两个值 true(真)false(假)
  • undefined:表示“未定义”,空或不存在
  • null:表示空值
  • 对象(object):各种值组成的集合
  • symbol:es6的新增数据类型,这里不做介绍

使用typeof获取数据类型,需要注意的是函数的数据类型输出虽然是“function”,但其数据类型是“object”,null的类型输出虽是object,但实际上是null

// 查看数据类型
typeof 1
"number"
typeof 'hi'
"string"
typeof false
"boolean"
typeof undefined
"undefined"
typeof null
"object"
typeof {}
"object"
typeof []
"object"
typeof function(){}
"function"  
typeof Symbol()
"symbol"

undefined 和 null

两者实际上都表示没有(也许可以说是一种设计错误了),而undefined则一般出现在未赋值的变量,未定义的属性,无返回值的函数返回值(或返回值是未传入的参数),下面是输出参考:

// 未赋值变量
var x
undefined
x
undefined

// 无返回值
(function() {return})()
undefined

// 返回值是未传入的参数
(function(unpass) {return unpass})()
undefined

// 未定义属性
var emptyObj = {}
undefined
emptyObj.prop
undefined

// == 情况下与null相等
undefined == null
true

// bool判断
Boolean(null)
false
Boolean(undefined)
false

// 代表数值
Number(null)
0
Number(undefined)
NaN

boolean

布尔值,只有truefalse两种状态,只有在以下几种情况下才会判断为false

  • undefined
  • null
  • false
  • 0
  • 非数字:NaN
  • 空字符串:""'' 或 ``
Boolean(NaN)
false
Boolean(undefined)
false
Boolean(null)
false
Boolean(0)
false
Boolean(-1)
true
Boolean('')
false
Boolean("")
false
Boolean(``)
false

number

JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。

1 === 1.0
true

数字的表示和进制

// 次方
Math.pow(2, 3)
8

// 科学计数法
2e3
2000

2 * Math.pow(10, 3)
2000

// Number 可表示的范围
Number.MAX_VALUE
1.7976931348623157e+308

Number.MIN_VALUE
5e-324

// 16进制
0x10
16
// 8进制
0o10
8
// 2进制
0b10
2
// 不建议的8进制表示法,以0开头(浏览器为兼容旧代码的处理,将以0开头的数字识别为8进制,在es5的严格模式和es6中已废除)
010
8

NaN(Not a Number),NaN与任何数(包括它自己)的运算,得到的都是NaN。

// NaN的判断
typeof NaN
"number"

NaN === NaN
false

isNaN(NaN)
true

// 运算
NaN + 1
NaN

NaN + NaN
NaN

Infinity,无穷,有正无穷和负无穷

1 / 0
Infinity

1 / -0
-Infinity

parseInt,通常用于将字符串转换为整数;parseFloat,通常用于将一个字符串转为浮点数

parseInt('9')
9

// 先转字符串再parse
parseInt(9)
9

// 2进制输出10进制
parseInt('1000', 2)
8

// 超出进制范围
parseInt('2', 2)
NaN

isFinite,用于检查值是否是一个有限数值(finite number)。在必要情况下,参数会首先转为一个数值。

isFinite(Infinity)
false
isFinite(-Infinity) 
false
isFinite(NaN)
false
isFinite(undefined)
false
isFinite(null)
true
isFinite(-1)
true

object

对象,JavaScript中最重要的也是最常用的数据类型。与Python中的字典有类似之处。简单的说就是键值不重复的键值对。

// 定义
var obj = {}

// 属性赋值
obj.foo = 'foo'

obj['bar'] = 'bar'

obj
{foo: "foo", bar: "bar"}


// 属性获取
obj.foo
"foo"

obj['bar']
'bar'

// 属性删除
delete obj.foo
true

obj
{bar: "bar"}

// 查看属性
Object.keys(obj)
["bar"]

// 判断是否包含属性
'bar' in obj
true

'foo' in obj
false

// 遍历属性
for (var attr in obj) {
    console.log(typeof attr, attr)
    console.log(typeof obj[attr], obj[attr])
}
string bar
string bar

string

字符串,即文本。

// 定义与表示
var 
  hiText = 'hi', 
  specialCharacterText = 'say \'hi\'',  // “\”用于符号转义 使用“\\”表示“\”
  multiLineText = 'a'  // 多行字符串,
                + 'b'
  unicodeText = '\u4f60'  // unicode表示

我们还需要知道,每个字符在 JavaScript 内部都是以16位(即2个字节)的 UTF-16 格式储存。也就是说,JavaScript 的单位字符长度固定为16位长度,即2个字节。

但是,UTF-16 有两种长度:对于码点在U+0000到U+FFFF之间的字符,长度为16位(即2个字节);对于码点在U+10000到U+10FFFF之间的字符,长度为32位(即4个字节),而且前两个字节在0xD800到0xDBFF之间,后两个字节在0xDC00到0xDFFF之间。举例来说,码点U+1D306对应的字符为𝌆,它写成 UTF-16 就是0xD834 0xDF06。

JavaScript 对 UTF-16 的支持是不完整的,由于历史原因,只支持两字节的字符,不支持四字节的字符。这是因为 JavaScript 第一版发布的时候,Unicode 的码点只编到U+FFFF,因此两字节足够表示了。后来,Unicode 纳入的字符越来越多,出现了四字节的编码。但是,JavaScript 的标准此时已经定型了,统一将字符长度限制在两字节,导致无法识别四字节的字符。上一节的那个四字节字符𝌆,浏览器会正确识别这是一个字符,但是 JavaScript 无法识别,会认为这是两个字符。

——阮一峰JavaScript教程-字符串

'𝌆'.length
2

参考链接:
阮一峰JavaScript教程

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

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,151评论 0 13
  • 一、初识数据类型 1. 概要 JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的...
    莫藤苔阅读 472评论 0 0
  • 7种数据类型 number(数值) :整数和小数(浮点数) string(字符串):文本'123' 'string...
    饕餮潴阅读 441评论 0 0
  • JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么? 七种...
    _Dot912阅读 349评论 2 2
  • 1.数据类型的分类 1.总体分类 JavaScript语言的每一个值,都属于某一种数据类型。JavaScript的...
    饥人谷_小侯阅读 267评论 0 0