美文网首页我爱编程
JS基础系列(一): JS里的数据

JS基础系列(一): JS里的数据

作者: squall1744 | 来源:发表于2018-03-26 00:41 被阅读0次

    JS数据类型


    • 基本类型
      number
      string
      boolean
      undefined
      null
      symbol(不常用)

    • 引用类型
      object

    number类型


    number就是数字类型, 支持多种写法

    十进制

    整数 1 2 3 4 5 6 7 8 100
    小数 1.1 2.3 0.125 4.235 .5 .6 .7
    科学计数法 1.35e2表示135

    二进制

    0b10 0b11 0b1101

    八进制

    0b10 0b12

    十六进制

    0xff 0x11 0x4a

    string类型


    单行字符串

    ''或者""包含的数值, 如
    'abc'表示字符串abc
    '10' 表示字符串10, 并非数字10
    "d23"表示字符串d23
    ''引号之间什么都不加表示空字符串, 长度为0
    ' '引号中间有空表表示一个空格字符串, 长度为1, 这点需要注意

    字符串转义

    某些特殊的字符会产生歧义, 这时候我们需要用转义符来表示, 比如

    我们需要表示一个'单引号字符串,如果直接输入三个引号''' , JS就会不知道该怎么解析, 到底是前两个引号是一组, 最后一个是另外一个引号还是第一个和第三个是一组, 中间的是字符串, 通常情况下, JS对这种情况会解析为前两个是一组引号, 最后一个是多余的单引号,这样会报错, 这种情况下, 就需要借助转义符了

    我们用\后面跟一个字符表示转义,比如刚才的情况, 我们可以下写成'\'', 这样JS就会把\后面紧跟的那个符号解析成字符了

    这里需要注意\'的长为1, \不占长度的

    下面列出JS常用转义符

    符号 功能
    \' 单引号字符串
    \" 双引号字符串
    \& 和号字符串
    \\ 反斜杠字符串
    \n 换行
    \r 回车
    \t 制表
    \b 退格
    \f 换页

    多行字符串

    当我们需要输入多行字符串的时候我们可以用以下方法

    let a = '12334\
    dfdfdfdsf\
    fdfddf'
    
    let b = "dffdfdf\
    ddf1111\
    dfdffdf"
    

    这里需要注意\后面必须紧跟着输入回车键, 不能有空格等任何字符, 不然JS会报错

    模板字符串

    ES6引入了模板字符串, 这个使得字符串更容易输出了

    模板字符串使用两个``符号(键盘上数字1旁边那个键)包裹字符串,

    比如上面的多行字符串, 我们可以不用转义符号

    let a = `asdfd
    cvvbf`
    

    这里有个坑, a的长度是11, 因为回车也被认为是一个字符

    模板字符串里还可以包含变量, 变量在模板字符串中用${变量名}表示

    let a = 'hello'
    
    let b =`${a} world`
    
    //输出结果为hello world
    

    boolean类型


    boolean只有两个值truefalse, 用来判断逻辑真和假的值, 比如我们常用的if语句的判断条件

    let a =3 
    if(a < 3) {
      console.log(1)
    } else if(a>2) {
      console.log(2)
    }
    
    //打印出2, 因为a<3的值是false, a>2的值为true所以执行条件为a>2的语句
    
    

    &&||

    &&表示逻辑与, 表达式中有一个值为false, 则整个表达式的值为false

    true && true = true
    true && false = false
    false && false = false

    ||表示逻辑或, 表达式中有一个值为true, 整个表达式的值为true

    true || true = true
    true || false = true
    false || false = false

    null类型和undefined类型


    这两个类型都是只有一个值, 都表示什么也没有, 为什么表示什么也没有会有两个值呢, 大家可以理解为这是js设计的一个bug, 下面来说下这两个值得细微差别

    • 如果一个变量没赋值, 则是undefined
    • 有一个对象object, 暂时不想赋值, 可以给个null,
    • 基于以上两点, 我们可以认为null是空对象, undefined是空的基本类型

    请记住上面三点即可

    object类型


    object就是对象, 表示一个哈希表, 对象里面可以包含若干个简单类型及复杂类型的键值对

    let obj = {
      name: 'Adam',  //string类型
      age: 25,  //number类型
      gender: 'male' //string类型
    }
    
    obj.name //输出Adam
    obj.age //输出25
    obj.job //输出undefined, 没有定义
    obj['name'] //等同于obj.name, 输出Adam
    

    上面的例子应该很好理解, 但是这里有一个需要注意的obj.name中的name并不是变量而是字符串实际上就是'name', 假设我们有以下代码

    let a = 'name'
    let obj = {
      name: 'Adam', 
      age: 25, 
      gender: 'male' 
    }
    obj.a // 这里打出的是undefined, 因为a是字符串'a', 而不是变量a
    obj[a] //这个可以打出Adam
    

    我们对象里面可以再添加对象吗, 答案是可以

    let obj = {
      name: 'Adam',  //string类型
      age: 25,  //number类型
      gender: 'male', //string类型
      son: {
        name: 'Tomy',
        age: 2,
        gender: 'male'
      }
    }
    
    obj.son.name //输出Tomy
    bbj.son.age //输出2
    

    我们甚至还能添加个空字符串当key

    let obj = {
      name: 'Adam',  //string类型
      age: 25,  //number类型
      gender: 'male', //string类型
      son: {
        name: 'Tomy',
        age: 2,
        gender: 'male'
      },
      '': 'blank'
    }
    

    这里还有一点需要注意, 对象的key也是可以加引号的, 不加引号的情况下, key必须符合js的命名规则, 即9a或者a b都是不合法的, 但是如果加上引号, 则'9a'和'a b'则是合法的key名称

    let obj = {
      9a: 'xxx', //不合法, 会报错
      '9a': 'xxx' //合法, 不会报错
    }
    

    delete, in, for in 和 typeof


    delete 和 in

    delete用来删除对象里的内容, in用来查看键值对是否在对象中

    let obj = {
      name: 'Adam',
      age: 25,
      gender: 'male'
    }
    'name' in obj    //true 表示obj中有name键值对
    delete obj['name']
    obj.name        //name: 'Adame'已经被删除,所以是undefined
    'name' in obj  //false
    

    for...in

    for in用来遍历对象中的key,

    我们有以下代码, 用来打印出obj中的key, 但是需要注意的是, 由于对象中的key是无序排列的, 所以先打出来name还是age还是gender, 这个看运气了

    let obj = {
      name: 'Adam',
      age: 25,
      gender: 'male'
    }
    
    for(let key in obj) {
      console.log(key)
    } //随机顺序打印出name, age, gender 
    

    typeof

    用来检测变量的类型, 比如

    let a = 'adf'
    let b = 123
    typeof a // string
    typeof b // number
    

    这里又有两个个bug

    • null的typeof是object
    • 函数的typeof是function

    相关文章

      网友评论

        本文标题:JS基础系列(一): JS里的数据

        本文链接:https://www.haomeiwen.com/subject/ekyfcftx.html