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

JS 里的数据类型

作者: 加油吧_ | 来源:发表于2018-05-12 16:30 被阅读5次

    1. 七种数据类型

    • number 数值 :整数和小数
    • string字符串 : 文本
    • boolean布尔值 :true false
    • undefined :未定义或不存在
    • null :空值
    • object对象 : 值的集合
    • symbol
      前五种是基本类型
      对象包括: object 、 array数组 、function函数

    2. typeof 运算符 typeof 可以用来检查一个没有声明的变量,而不报错。

    数值 : number
    字符串 :string
    布尔值 :boolean
    函数 :function
    undefined :undefined
    null : object

    3.null 和 undefined

    区别:null是一个空值 转为数值时为0
    undefined 是一个表示 “此处未定义” 的原始值,转为数值时为 NaN
    在 if 语句中两个都是 false
    相等运算符(==)甚至直接报告两者相等

    用法和含义

    调用函数时,某个参数未设置任何值,传入null,表示参数为空

    undefined 未定义

    • 变量声明,但未赋值
    • 调用函数时,应该提供的参数没有提供,该参数等于undefined.
    • 对象没有赋值的属性
    • 函数没有返回值,默认返回undefined

    4. 布尔值 true false

    • 两元运算符 &&(and) //(or)
    • 前置逻辑运算符 ! (not)
    • 相等运算符 === == !== !=
    • 比较运算符 > < >= <=
      一般用于程序流程的控制

    空数组([])和空对象({})对应的布尔值,都是true

    五个falsy值 其他都为true

    undefined null 0 NaN ' '(空字符串) false

    5. Number

    所有数字都是以64喂浮点数储存

    数值精度

    第一位 : 符号位 0 正 1 负
    第2到12位: 指数部分
    第13到64位:小数部分 (有效数字)

    数值范围:21024~2-1023

    a> 2^1024 正向溢出 返回Infinity
    a< 2^-1075 负向溢出 返回0

    数值的表示法

    科学计数 :
    123e3 //123000 123e-3 //0.123
    自动转为 小数点后的0 多余5
    (0.0000003 //3e-7)
    小数点前的数字多余21位

    数值的进制

    2 8 10 16 进制
    十进制 : 没有前导 0的数字
    八进制: 0o 或0O的数值 或有前导0 只用到0-7的数值 0o377 // 255
    十六进制 : 0x或0X的数值 0xff //255
    二进制: 有前缀0b 或0B的数值 0b11 // 3

    特殊字符 0

    正零 和 负零

    + 0 === -0 //true
    唯一区别: 坐分母时返回值不一样
    1/+0 // +Infinity 1/-0 //-Infinity 无穷

    NaN

    表示 非数字 数据类型是Number
    0/0 // NaN
    运算规则

    • NaN不等于任何值,包括自身
    • NaN 布尔运算是false
    • NaN与任何值运算都是 NaN
    • 数组的indexof方法内部使用的是严格相等运算符,该方法对NaN不成立

    6. Boolean 字符串

    概述:就是多个或单个拍在一起的字符放在单引号或双引号中。

    • 单引号中使用多引号 双引号中使用单引号
      " ' ' " ' " " '
    • 字符串默认写在一行,分成多行会报错
    • 多行字符串写法
    var long ='long'
       + 'long'
       + 'string';
    
    var long = 'long\
    long\
    string`;
    

    转义符

    \0 :null(\u0000) \b :后退键(\u0008)
    \f :换页符(\u000C) \n :换行符(\u000A)
    \r :回车键(\u000D) \t :制表符(\u0009)
    \ v :垂直制表符(\u000B) \ ' :单引号(\u0027)
    \ " :双引号(\u0022) \ \ :反斜杠(\u005C)

    length 属性

    返回字符串的长度,属性无法改变

    Base 64 转码

    btoa() : 任意值转为 Base64 编码
    atob(): Base64编码转为原来的值

    7. 对象 Object

    概述 ; 对象就是一组 "键值对" 的集合,无序的复合数据类型

    对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型。如果一个属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用。

    • 键名是数值,自动转为字符串
    • 键名不符合标识符的条件,也不是数字,必须加引号。
    • 键名 都是 属性,键值可以是任何数据类型

    对象的引用

    如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量。

    如果取消某一个变量对于原对象的引用,不会影响到另一个变量

    var o1 = {};
    var o2 = o1;
    o1 = 1;
    o2   // {}
    

    表达式还是语句

    • 行首是大括号,一律解释为代码块。
    • 如果解释为表达式,在大括号外加上圆括号。
    eval('{foo: 123}') // 123
    eval('({foo: 123})') // {foo: 123}
    

    如果没有圆括号,eval将其理解为一个代码块;加上圆括号以后,就理解成一个对象。

    属性的操作

    一种是使用点运算符,还有一种是使用方括号运算符

    var obj = {
      p: 'Hello World'
    };
    obj.p // "Hello World"
    obj['p'] // "Hello World"
    
    • 如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。
    • 数字键可以不加引号,因为会自动转成字符串
    • 数值键名不能使用点运算符(因为会被当成小数点),只能使用方括号运算符

    属性的赋值

    点运算符,还有一种是使用方括号运算符

    var obj = {};
    obj.foo = 'Hello';
    obj['bar'] = 'World';
    

    Object.keys 查看所有属性

    delete 命令 delete obj.width

    delete命令用于删除对象的属性,删除成功后返回true

    • 删除一个不存在的属性,delete不报错,而且返回true
    • 只有一种情况delete命令会返回false,那就是该属性存在,且不得删除
    • delete命令只能删除对象本身的属性,无法删除继承的属性
      delete返回true,该属性依然可能读取到值 >>(继承的属性)

    in 运算符

    in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false。
    它不能识别哪些属性是对象自身的,哪些属性是继承的。

    var obj = { p: 1 };
    'p' in obj // true
    'toString' in obj  // true
    

    for…in 循环

    for...in循环用来遍历一个对象的全部属性。

    它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
    它不仅遍历对象自身的属性,还遍历继承的属性。

    with 语句 不推荐使用

    with语句的格式如下:
    with (对象) {
    语句;
    }

    var obj = {
      p1: 1,
      p2: 2,
    };
    with (obj) {
      p1 = 4;
      p2 = 5;
    }
    // 等同于
    obj.p1 = 4;
    obj.p2 = 5;
    

    如果with区块内部有变量的赋值操作,必须是当前对象已经存在的属性,否则会创造一个当前作用域的全局变量。

    相关文章

      网友评论

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

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