JS里的数据类型

一、种类

截止目前,JavaScript有七种数据类型:number,string,boolean,symbol (ES6增),null,undefined,object 。
其中,前六种属于基本数据类型,object 属于可由基本类型组成的复杂类型。

二、熟练掌握

  1. 数据类型好比经济基础,打好了地基才能构建高楼,这是踏入JS的第一步。
  2. (由于设计上的Bug)没有一个能完美辅助我们判断上述数据类型的方法。
    判断类型常用到 typeof 操作符,typeof xxx 之后得到的都是字符串。
xxx 的类型 number string boolean symbol undefined null object function
typeof xxx 'number' 'string' 'boolean' symbol 'undefined' 'object' 'object' 'function'

关于 typeof 的两大Bug如下:

typeof null // 'object'
typeof function() {} // 'function'

三、基本类型 number string boolean null undefined

值不可变的,即值本身无法被改变

1. number 数字类型

JavaScript 内部,所有数字均以64位浮点数存储,并没分离出整数类型,所以 1 === 1.0,表示同一个数字。但是当运算需要整数时,JavaScript 又会自动把 64位浮点数 转成 32位整数,然后再进行运算。

浮点 是一种对于实数的近似值数值表现法,由一个有效数字(即尾数)加上幂数来表示,通常是乘以某个基数的整数次指数得到。以这种表示法表示的数值,称为浮点数(floating-point number)。利用浮点进行运算,称为浮点计算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入
准确性:由于浮点数不能表达所有实数,浮点运算与相应的数学运算有所差异,有时此差异极为显著。
—— 摘取自维基百科

相对定点数而言,浮点数是小数点可变的数,从上述定义可以看出,浮点数不是精确的值,它的小数运算可能由于丢失精度,往往不是我们所期望的结果,所以涉及小数的比较和运算要特别小心。

0.2 + 0.4 // 0.6000000000000001
0.6 / 0.1 // 5.999999999999999
(0.3 - 0.2) === (0.2 - 0.1)  // false
数值表示和进制

数字可采用科学计数法表示,使用 eE进行缩写,如:1.23e2 == 123。
当 ①小数点前的数字多于21位 ②小数点后的零多于5个,此时JavaScript会自动数值转为科学计数法表示。

JavaScript 的整数有4种字面量表示格式,分别是十进制、二进制、八进制、十六进制,而且默认情况下,其他进制表示的数值会自动转为十进制表示。

  • 十进制:没有前导0或单个数值大于7的数值。
71  // 71
081 // 81
  • 二进制:有前缀0b或0B的数值。
0b1001  // 9
0B010   // 2
  • 八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。

前导 0 表示八进制,处理时很容易造成混乱。ES5 的严格模式和 ES6,已经废除了这种表示法,但是浏览器为了兼容以前的代码,目前还继续支持这种表示法。

071  // 57
0o11 // 9
  • 十六进制:有前缀0x或0X的数值。
0x11  // 17
0XA1  // 161
特殊数值

number类型包含几个特殊数值,包括 +0、-0、NaN、+Infinity、-Infinity
NaN表示“非数字”(Not a Number),一些数值相关操作出错时就会得到NaN,可通过 !isNaN(xx) 判断该值是否为有效数字,还有 typeof NaN == 'number'。

2. string 字符串类型

零个或多个字符由成对的单引号'' 或 双引号 "" 包裹起来的形式就是字符串

转义

为什么要转义?

  • 字符串的内容包含单引号或双引号
  • 字符串中表示一些特殊含义的字符,如换行符、制表符等

转义符
转义符以反斜杠(\)开头,用来表示一些特殊字符。
串。

转义符 含义 Unicode 字符值
\0 null \u0000
\b Backspace \u0008
\f 换页符 \u000C
\n 换行符 \u000A
\r 回车键 \u000D
\t 制表符 \u0009
\v 垂直制表符 \u000B
' 单引号 \u0027
" 双引号 \u0022
\ 反斜杠 \u005C

多行字符串(一个字符串分多行书写)

// ① \后不能任何字符,换行后的必须顶格,出错难找,如②
var s = '1234  \
590'

// ② 报错
var s = '1234 \   
590'

// ③ 前两种都不推荐
var s3 = '1234' + 
         '590' 

// ES6 新增
var s4 = `1234
    590`         // 包括了输入的特殊字符 等价于 "1234 ↵ 590"
s4.length        // 10

3. boolean 布

1)“布尔”的由来:纪念一位敬业的逻辑学家乔治·布尔而得名
2)取值,只有两个值:true(真) 和 false(假)
3)&&(逻辑且) 、||(逻辑或) 逻辑操作真值表口诀: a && b 一假必假; a || b 一真必真
4)熟记五个falsy值:0 null undefined NaN ''或""(空字符串)

4. symbol 符号

唯一特性:使用Symbol()可以创建一个全局唯一的值,其类型为symbol。

5. null 和 undefined

两者皆表示什么也没有,它们的区别如下:
1)语法上,如果变量只是声明没赋值,则它默认值为 undefined
2)惯例而言,有一个对象object,现在还不想赋值,则赋值为 null(一般表示空对象);有一个非对象,还不想给值时,则赋值为 undefined(一般表示空非对象)。

四、复杂类型(object 对象)

1. 概述

对象(object)是最重要的数据类型。
对象就是哈希表,即一组“键值对“(key: value)的集合,是一种无序的复合数据集合。

2. 声明赋值
var person = {
    name: 'Amanda',
    age: 22,
    married: undefined,
    graduate: true,
    'good-friends': {
        name: 'June'   
    },
    '': null
}
  • key: value的形式中key为字符串,value可以是任意七种数据类型。
  • 空串属于字符串,可以被当作对象数据的key。
  • 如果key为合法标识符,书写时,作为字符串标识的引号可以被省略,但key仍然是字符串。
3. 访问、编辑对象

两种访问对象的方式:(1)变量名[key] (2)变量名.key

var obj = {
    code: 0001,
    'data-text': 'a box'   
}

obj.code            // 0001
obj['code']         // 0001
obj['data-text']    // 'a box'
obj.data-text       // Uncaught ReferenceError: text is not defined

// 赋值
obj.name = 'div'    
obj.name = undefined

'name' in obj       // true
delete obj.name     // 删除obj.name属性
'name' in obj       // false

Object.keys(obj)    // ["code", "data-text"]

由上可知,变量名[key] 属于通用方法,只有当key满足合法标识符时,才能使用 变量名.key 访问。

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

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,114评论 0 13
  • 简介 JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有七种。 n...
    sxfshdf阅读 869评论 0 48
  • JS 里的数据类型 JavaScript 的数据类型,共有六种。 1、数值(number)2、字符串(string...
    leiuno阅读 304评论 0 1
  • 前言:之前的博客介绍了JS中的各种数据类型,那么可不可以把已经确定的数据类型转换成其他的数据类型呢?本文就将介绍一...
    EnochQin阅读 578评论 0 3
  • 文|铭悦 在别人的文字里游走,形容看书。一点不假,就像偶然的今天,在微信读书app中。来回翻着找着,下面准备看什么...
    铭悦阅读 496评论 0 2