初识JS数据类型

7种数据类型

数值/数字(number):整数和小数

字符串(string):文本

布尔(boolean):两个特殊值表示 true 和 false

符号(symbol)

null:空值

undefined:未定义 不存在

对象(object):各种值组成的集合,除上述六种之外的数据都是对象

前6种为基本(简单)类型,对象为复杂类型。

数值/数字(number)

十进制

没有前导 0 的数值

1
1.1 // .1
1.23e2  // 123 e大小写都可

二进制

0b 或者 0B 开头

0b1 // 1
0B10 // 2

八进制

前导 0 开头且只有 0-7 八个阿拉伯数字的数值,或者 0o0O 开头

011 // 9

使用注意:比如用一个变量来表示电话号码(01开头),如果用数值来存,系统可能会默认当做八进制数值,所以当遇到这种情况,应该以字符串的形式来存电话号码。

十六进制

0x 或者 0X 开头

0x11 // 17

字符串(string)

放在 '' 或者 "" 之中

"hello"
'hello'

可以是空字符串

"" // length: 0
''

也可以是空格字符串

" " // length: 1
' '

注意

  1. 单引号字符串内部可以使用双引号,反之亦然

    '"' // 表示单个双引号的字符串
    "'" // 表示单个单引号的字符串
    ''' // unexpected token
    
  2. 单引号字符串内部如要使用单引号,则必须添加反斜杠来转义,双引号字符串内部要用双引号,也是这样

    '\'' // 表示单个单引号的字符串
    "\"" // 表示单个双引号的字符串
    
  3. 转义符的日常应用

    转义符 含义
    \0\u0000 null
    \b\u0008 后退键
    \f\u000C 换页符
    \n\u000A 换行符
    \r\u000D 回车键
    \t\u0009 制表键
    \v\u000B 垂直制表符
    \'\u0027 单引号
    \"\u0022 双引号
    \\\u005C 反斜杠
  4. 多行字符串 (不是字符串内部)

    类似命令行

    var s = '12345 \
    67890';
    // '12345 67890'
    // 该换行方式不推荐使用,如果 \ 后有空格则会报错
    // 会被认为给空格转义
    
    var s ='12345
    67890';
    // unexpected token
    
    var s = '12345 ' +
    '67890';
    // '12345 67890'
    
    var s = '12345 ' 
    + '67890';
    // '12345 67890'
    
    1. 多行字符串 (字符串内部)

      var s = `12345
        67890`;
      // ES6 新语法,反引号内可表示多行字符串
      // 注意每行开头和结尾的空格
      // 此处5后无空格,6前有一个空格
      // '12345
      //   67890'
      // s.length 为 12,10个数字,1个回车,1个空格
      

布尔(boolean)

  1. 取值:truefalse

  2. a && b 运算

    a 和·b 都为 truea && btrue

  3. a || b 运算

    a 和·b 都为 falsea || bfalse

null 和 undefined

变量没有值,则为 undefined

使用惯例:`

  • 有一个对象(object),但现在不想赋值,推荐 null,表示空对象

    var obj = null
    
  • 有一个非对象,,但现在不想赋值,推荐 undefined,表示空非对象

    var n
    

对象(object)

复杂类型数据,简单说就是是由前6种简单类型数据组成的,许多 key: value的集合。

键名 (key)

键名 key 又可以称为属性 property

举例

var obj = {
    line1: 'hello',
    line2: 'world',
    line1line2: '表达式',
    '9a': '键名不符合标识符',
    9: '键名是数字',
    '': '空字符串键名',   
    'a b': '含空格键名',
    'a+b': '含运算符键名'
}
// 冒号左边是 key 是字符串,会被自动转成字符串
// 无论是否有引号,可以省略
// key 如果不符合标识符且不是数字,则必须加引号不然报错
// ES6 引入了 Symbol值也可以作为 key
// 冒号右边是 value 如果有引号,不能省略

读取属性

如果要取出 line2这个keyvalue , 我们可以使用方括号运算符([]),此时不能省略 key 的单引号,否则会被当变量处理

obj['line2'] // 'world'

var line2 = 'line1'
obj[line2] // 'hello'
// 引号不能省略,这里line2被看做了变量

obj['line1' + 'line2']  // '表达式'
// 键名等价于 'line1line2'
obj[3+6] // '键名是数字'
// 键名等价于 '9'
obj[9 + 'a'] // '键名不符合标识符'
// 键名等价于 '9a'
// [] 内可以用表达式,数字可以不加引号,会自动转化成字符串

如果键名符合标识符的条件,上述读取 line2 属性,我们可以使用点运算符 (.

obj.line2  // 等价于 obj['line2']

赋值属性

我们同样可以用方括号运算符([])和点运算符 (.)来进行赋值。

var obj = {};
obj.name = 'xxx';
// 属性赋值不需要属性已经存在
// 可已随时增加新属性

删除属性

delete obj.line2 // ture 同时删除 key 和 value
obj.line2 // undefined  没有键值
'line2' in obj // false 没有键名

var obj.line2 = undefined  // 只删除键值
obj.line2 // undefined 没有键值
'line2' in obj // true 键名仍旧存在

遍历属性(key)

for (var key in obj) {
    console.log(key)
}
// 打印key

for (var key in obj) {
    console.log(key,obj[key])
}
// 打印key和value,注意这里key是变量
// 所以不能写成 obj.key或者 obj['key']

注意点:

  1. in 运算符检查的是属性而不是键值,存在返回 true,反之false

  2. for (var key in obj) {} 循环

    遍历的属性必须是可遍历的,同时不仅遍历对象自身的属性同时遍历继承的属性

查看属性

使用 Object.keys 来查看对象的所有属性

var obj = {
    line1: 'hello',
    line2: 'world'
}

Object.keys(obj); // ["line1", "line2"]

键值 (value)

键值 value 可以是任何数据类型,不单单是字符串

var obj = {
    testBoolean: true,
    testNumber: 10, 
    testString: 'hello world',
    testNull: null,
    testUndefined: undefined,
    testSymbol: Symbol('a'),
    testObject: {name: 'XXX', age:20, male: true},
    self: obj
}

typeof 运算符

返回一个值的数据类型

// 1. 数值 number
typeof 1  // 'number'

// 2. 字符串 string
typeof '1'  // 'string'

// 3. 布尔值 boolean
typeof true  // 'boolean'

// 4. undefined
typeof undefined  // 'undefined'

// 5. 对象 object
typeof {}  // 'object'
typeof []  // 'object'

// 6. null
typeof null  // 'object'

// 7. 符号 symbol
typeof Symbol() // 'symbol'

// 8. 函数 function
function f(){}
typeof f  // 'function'
typeof Symbol // 'function'

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

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,744评论 0 10
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,180评论 0 3
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • JavaScript 的数据类型,共有七种。数值(Number):整数和小数(比如1和3.14)。字符串(Stri...
    手劲很大阅读 543评论 0 0
  • 思乡 风轻轻走在一片云上 它可知故乡的屋檐下 那只风铃正等得心疼 钓 你钓鱼儿 我钓美...
    秋氺阅读 1,230评论 16 11