ECMAScript数据类型

385 阅读5分钟

ECMAScript数据类型:

基本数据类型

  • 数字 number
  • 字符串 string -- 布尔值 boolean
  • null 空
  • undefined 未定义

引用数据类型

  • 对象 Object
  • 数组 Array
  • 时间 Date
  • 正则 RegExp
  • 函数 Function

类型检测:

  • typeof: typeof可以检测出 number、string、boolean、undefined、object typeof检测null为object
  • instanceof
  • Object.prototype.toString.call() == '[objet 类型]'
  • [].constructor === Array 啥啥是谁的构造函数

基本数据类型——数字

在数字类型中,有一个数字类型叫NaN,它是一个非法的数学运算 Infinity 正无穷大也是数字类型的

运算符: + - * / %取余

    在纯数字运算的时候,跟我们生活中的计算方式一致,
    隐式类型转换:
        自己没有去做,系统偷偷帮你做了
        ''+ 12 = '12'
    强制类型转换:
        系统没做,我们人为主动转换数据类型
    + 
        数字和字符串相加的时候结果为字符串,是一个字符串的拼接
        任意的数据加上字符串都会传成字符串。
        如果字符串前面只有一个 + 号,那么结果会隐式转换为数字类型
    -  
        数据在进行减法运算的时候,结果默认会转成数字类型

数学运算:

  • 加 +
  • 减 +
  • 乘 *
  • 除 /
  • 模取 %

强制类型转换

  • Number()
Number可以转换数字
空字符串使用Number转换为 0
空字符串使用parseInt转换为 NaN
console.log(Number([]));  // 0
console.log(parseInt([])); // NaN
  • parseInt()
parseInt(字符串,多少进制);
        把一个字符串类型转成数字类型并且取整。
        如果传入了第二个参数,那么就是来描述第一个参数的进制数,最后会转为十进制
        如果转换不出来,结果为NaN
        parseInt中如果使用Infinity,那么结果为NaN
  • parseFloat()
parseFloat(字符串)
 把一个字符串类型转成数字类型保留小数部分。
保留小数

toFixed(n)保留小数

将要计算的数据按照括号了的参数保留几位小数,末尾四舍五入,
且,最后的结果是字符串

NaN 非有效数字

当做了一次非法的数学运算,会出现NaN
    NaN是number类型,自己不等于自己
   isNaN() 去判断括号中的值是否为NaN,如果是NaN,会返回一个true的结果
        否则就是false
 isNaN喜欢NaN,讨厌数字
  NaN 一定是假的

Infinity正无穷大

基本数据类型——布尔值

布尔值:

  • true 真的
  • false 假的

运算符:

! 否、非、取反
可以颠倒是非,并且转成布尔值
!! 快速知晓某个数据类型的布尔值
        先运算parseInt 结果为NaN、
       NaN被isNaN运算之后结果true
       true被Number运算结果为 1
       1在布尔值中为true,取反为false,最后的结果为false
先用Boolean([])转数组,因为转出来的结果为true,再让true变为假的,最后结果为false

基本数据类型——null

什么时候会出现null?

  • 元素找不到;a.该元素压根不存在,b.元素存在但是写错了(script标签上面没有想要获取的元素)
  • 空对象指针
  • 正则没有匹配到字符的时候会出现null
  • 对象初始化赋值null
  • 内存释放,用完的变量赋值null

基本数据类型——undefined

什么时候出现undefined?

  • 声明变量没有初始化 默认为undefined
  • 对象下没有指定属性
  • 给除null、undefined的基本数据类型添加属性和方法为undefined
  • 函数的默认返回值为undefined
  • 函数有形参,没有传入对应实参,形参默认为undefined

基本数据类型——字符串

字符串:string
用单引号对''、双引号对""包裹的内容是字符串或者``
*** html页面的所有文本都是字符串

字符串拼接:

运算符:+

在复杂字符串拼接的时候,可以先设置一个默认的值,然后通过删除默认值 添加''(咔咔),在字符串中++ 即为:'+ 放变量 +' 字符串是不能回车的,不然会报错。

模板字符串

ES6中新增一个叫做模板字符串的语法:

  • 方法:${字符串或者变量或者运算}

如果在模板字符串中需要添加、更改字符串(进行字符串拼接),那么只需要在要添加的位置上面写一个${字符串或者变量或者运算}

引用数据类型——Object

什么是对象?

对象:引用类型 一个对象会开辟一个16进制的空间。
对象的key值都是字符串
对象下的数据是一些键值对,即属性名:属性值

如何获取对象下的数据?

. 对象下的啥,例:obj.key1 //=>value1; [] ,obj["key1"] // =>value1;因为对象的属性key是字符串,所以的用引号包起来。属性值会变的时候用这种方式获取属性值。

赋值和赋址

运行js的时候会开辟一个执行栈,专门用来运行js的,在浏览器中执行叫做全局作用域(window),在服务器中环境为global。简单点来说,就是简单类型的赋值为复制一份赋值,引用类型的赋值是赋地址。

  • 赋值——简单数据类型
let a = 10;
let b = a;
b = 5;
console.log(a);

读到第1行的时候会先在这个执行栈中开辟一个小空间存放10,再声明一个变量a,最后把10关联到了a身上,当读到第2行的时候,把a赋值给了b(因为a为简单类型),简单类型的赋值就是在之前变量的基础之上复制了一份,最后变量与数据相关联,所以改变b是不会影响a的

  • 赋址——引用数据类型
let obj = 
    {
        age:10
    };
let obj2 = obj;
obj2.age = 5;
console.log(obj.age);

当读到1行的时候,看到了对象(引用类型),那么会从新开辟一个堆内存16进制的地址,里面存着键值对,再把地址赋值给了obj,到了5行的时候,把obj的地址赋址给了obj2(obj和obj2是同一个地址),那么在改变obj2的属性的时候会影响obj