美文网首页
JS 里的数据类型

JS 里的数据类型

作者: 独钓寒江月 | 来源:发表于2019-06-01 19:56 被阅读0次

    数据类型分为:数值Number,字符串String,布尔值Boolean,Symbol,Null,Undefined,对象Object

    其中,数值,字符串,布尔值为原始类型

    对象是最复杂的数据类型,又可以分成三个子类型。

    1.狭义的对象(object)
    2.数组(array)
    3.函数(function)

    1.判断数据类型

    用typeof运算符判断数据类型,像数值、字符串、布尔值就会分别返回number、string、boolean。
    注意以下几个案例的typeof的返回值,比较特殊

    typeof undefined  //undefined
    typeof null  //object
    typeof fn  //function
    

    2.Number

    浮点数

    JavaScript内部使用64位浮点数,如遇到只有整数才能完成的运算,则转为32位整数。
    由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。

    0.1 + 0.2 === 0.3
    // false
    0.3 / 0.1
    // 2.9999999999999996
    (0.3 - 0.2) === (0.2 - 0.1)
    // false
    

    范围精度:-2^53 ~2^53
    数值范围 2^-1023 ~2^1024

    表示方式:

    var a = 1
    var a = .1
    var a = 1.23e2
    Ob11 //二进制
    011 //八进制
    0x11 //十六进制

    特殊数值:

    (1)+0与-0
    除了做分母分别返回 + Infinity/-Infinity 外,二者可以看作相等。
    (2)NaN
    表示“非数字”,属于Number,不等于任何值。不论怎么算,都返回一个NaN。
    tips 0/0 // NaN
    (3)Infinity
    使用场景:值过大/值过小/0做分母

    与数值相关的全局方法:

    (1)parseInt()
    基本用法:
    1.将字符串转换为整数(一个个依次转,转到不能转为止)
    2.接受第二个参数表示进制
    parseInt('1000',2) //8
    (2)parseFloat()
    基本用法:
    1.用于将字符串转换为浮点数(一个一个依次转,转到不能转为止)
    2.当转换的目标不是字符串(如{})/第一个不能转换为浮点数(如'FF2')/空 的时候,返回NaN
    (3)isNaN
    用于判断值是否为NaN,只对数值有效。(不是数值?转!)
    tips:判断NaN可以利用其唯一不等于自身的特点

    function myIsNaN(Value){
    return value !==value;}
    

    3.String

    每个字符在JS中以 16 位 UTF-16 格式储存,也就是说,JavaScript 的单位字符长度固定为16位长度,即2个字节。比如四字节字符𝌆,浏览器会正确识别这是一个字符,但是 JavaScript 无法识别,会认为这是两个字符。

    String表示举例:

    var a = 'Hi'
    var a = "Hi"
    var a = '' //长度为0
    var a = ' ' //加空格,长度为1

    多行字符串

    (1)将一个字符串分成三行写,JavaScript 就会报错。如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。
    但是如果在\后面有空格,浏览器就会报错,而我们却看不出来,容易产生BUG,推荐使用第二种方法。
    (2)连接运算符(+)可以连接多个单行字符串,将长字符串拆成多行书写,输出的时候也是单行。

    var longString = 'Long '
      + 'long '
      + 'long '
      + 'string';
    

    (3)键盘1旁边的反引号

    ES6新增支持这种写法,更简便,可读性没有明显提高。

    var s = `Hello
    World`
    

    字符串转义

    反斜杠(\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。

    \0 :null
    \b :后退
    \f :换页
    \n :换行
    \r :回车
    \t :制表符
    \v :垂直制表符
    ' :'
    \ :
    如果在非特殊字符前面使用反斜杠,则反斜杠会被省略。

    字符串的长度

    .length属性返回字符串的长度,该属性也是无法改变的。

    '\t\n1' 的 length 为 3
    '\"' 的 length 为 1
    

    4.Null和Undefined

    都表示“没有”。区别在于null是一个表示“空”的玩意,转换数值为0,undefined是一个表示“此处无定义”的原始值,转换后为NaN。

    Null典型场景:

    1.有一个对象object,现在还不想赋值

    Undefined典型场景

    1.有一个变量,没有被赋值
    2.有一个非对象,不想赋值
    3.调用函数,应该提供的参数未提供
    4.函数没有返回值时,返回

    5.Boolean

    两个值,true/false。
    两元逻辑运算符: && (And),|| (Or)
    前置逻辑运算符: ! (Not)
    相等运算符:===,!==,==,!=
    比较运算符:>,>=,<,<=

    6.Object(复杂类型)

    是一组键值对的集合(key-value)
    是一种无序的复合数据集合。

    关于键值对

    是键名加键值的组合,其中,键名全是字符串,可以是空字符''。
    '中文' '9a' 'a b' 这种特殊的,必须加单引号,如果不想加,那么你的键名就要符合标识符规范。

    Delete删除Key

    可以利用delete删除key。删除后,无key也无value

    属性的操作

    (1)读取对象的属性
    1.点运算 obj.p
    2.方括号 obj['p']
    注意,如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。
    数值键名不能使用点运算符(因为会被当成小数点),只能使用方括号运算符。
    (2)查看对象属性
    查看一个对象本身的所有属性,可以使用Object.keys方法。

    var obj = {
      key1: 1,
      key2: 2
    };
    Object.keys(obj);
    // ['key1', 'key2']
    

    (3)判断是否存在 in
    in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false。
    (4)属性的遍历 for...in
    for...in循环用来遍历一个对象的全部属性。

    var obj = {a: 1, b: 2, c: 3};
    for (var i in obj) {
      console.log(obj[i]);
    }
    // 1
    // 2
    // 3
    

    for...in循环有两个使用注意点。
    1.它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
    2.它不仅遍历对象自身的属性,还遍历继承的属性。

    相关文章

      网友评论

          本文标题:JS 里的数据类型

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