标签: 数据类型

  • instanceof与typeof

    typeof

    typeof 用于判断简单数据类型

    例外 null

    typeof null //object
    

    typeof 检测复杂数据类型 结果是object

    例外 function

    typeof function //function
    

    instanceof

    作用

    用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上,存在返回true,不存在返回false

    语法

    实例对象 instanceof 构造函数

    使用instanceof判断是否通过该构造函数创建

    不准确

    let arr = []
    
    arr的原型链

    arr ==> Array.prototype ==> Object.prototype ==> null

    console.log(arr instanceof Array) // true
    console.log(arr instanceof Object) // true
  • js术语、数据类型

    术语

    术语解释举例
    关键字在JavaScript中有特殊意义的词汇let、var、function、if、else、 switch、case、break
    保留字在目前的JavaScript中没意义,但未来可能会具有特殊意义的词汇int、short、long、char
    标识(标识符)变量名、函数名的另一种叫法
    表达式能产生值的代码,一般配合运算符出现10 + 3、age >= 18
    语句一句代码也称之为一条语句,一般按 用途还会分类:输出语句、声明语句、 分支语句

    基本数据类型和引用数据类型的存储方式

    简单类型又叫做基本数据类型或者值类型复杂类型又叫做引用类型

    值类型:

    简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型 string number boolean undefined null

    引用类型:

    复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型。通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等

    堆栈空间分配区别:

    1.栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈;

    简单数据类型存放到里面

    简单数据类型存储方式

    简单数据类型直接存值

    引用数据类型存的是地址

    2.堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。

    引用数据类型里存的是地址

    引用数据类型存放到里面

    引用数据类型存储方式
    // 简单数据类型存储的是值
    let num1 = 10
    let num2 = num1
    num2 = 20
    console.log(num1)


    // 对象 引用数据类型 栈里面存储的是地址
    let obj1 = {
       age: 18
    }
    let obj2 = obj1  //将obj1在堆中的地址给obj2
    obj2.age = 20
    //obj1和obj2地址相同,在堆里找的是同一个东西
    console.log(obj1)   // 20
  • js基础概念

    数据类型

    基本数据类型

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

    null  undefined 区别:

    1. undefined 表示没有赋值
    2. null 表示赋值了,但是内容为空

    null 开发中的使用场景:

    官方解释:把 null 作为尚未创建的对象

    大白话: 将来有个变量里面存放的是一个对象,但是对象还没创建好,可以先给个null

    引用数据类型

    • object 对象
    • function 函数
    • array 数组

    类型转换

    检测变量类型

    //查看数据类型
    typeof 值
    //typeof运算符的返回类型为字符串,值包括如下几种:
    1. 'undefined' --未定义的变量或值
    2. 'boolean'   --布尔类型的变量或值
    3. 'string'    --字符串类型的变量或值
    4. 'number'    --数字类型的变量或值
    5. 'object'    --对象类型的变量或值,或者null(这个是js历史遗留问题,将null作为object类型处理)
    6. 'function'  --函数类型的变量或值
    

    隐式转换

    • +号两边只要有一个是字符串,都会把另外一个转成字符串
    • 除了+以外的算术运算符 比如 - * / 等都会把数据转成数字类型
    • +号作为正号解析可以转换成Number

    显式转换

    转换为字符串型

    let a = 124144
    
    String(a)
    
    a.toString(进制)    //括号内填写进制数
    

    转换为数字型

    Number('21')
    
    parseInt('10.12234') //10 转换为数字型 只保留整数部分
    
    parseFloat('10.3')//10.3 转换为数字型 保留小数部分
    
    Number('10px') //得到的值为NaN Number里面只能加数字
    parseFloat('10px')//10 保留数字部分 过滤其他(开头必须是数字)
    
    NaN  //not A number
    

    NaN也是number类型的数据,代表非数字

    前置自增/后置自增

    隐式转换

    前置自增:++i  // 自己先计算 后进行运算
    
    //例如
    let i = 1
    计算:++i + 3
    // 2 + 3 = 5
    
    后置自增:i++ // 先进行运算 后自己计算
    
    //例如
    let i = 1
    计算:i++ + 3
    // 1 + 3 = 4
    
    let i = 1
    计算:i++ + ++i +i
    //1 + 2 + 3
    1.i++ 此时i = 1
    2.i++ + ++i  此时i = 2
    3.i++ + ++i + i 此时i = 3
    

    比较运算符

    返回值 boolean 类型

    比较运算符有隐式转换

    最终把数据隐式转换转成number类型再比较

     console.log(3 > 5) // false
     console.log(5 >= 5) //  true
    
     // console.log(5 = 5)
     console.log(5 == 5)
    
     // == 只要值一样就是true  不管数据类型
     console.log(5 == '5')
     console.log(5 == 'pink')
    
     // === 以后判断要用三等  ===  开发常用   要求值和数据类型都一样
     console.log(5 === 5)
     console.log(5 === '5')
    
     // 特殊情况
     console.log('pink' > 'red')   //false 比较对应ASCII码 
     console.log('pink' > 'pin')  // true  从左往右一位一位开始比较 得出结果停止
    
     console.log(1 === NaN)      //NaN不等于任何值 包括它本身
     console.log(NaN === NaN)
    
    																	//尽量不要比较小数
     console.log(0.1 + 0.2 === 0.3)  // 0.1 + 0.2 = 0.3000···004 小数精度问题
     console.log(0.1 + 0.2)
    
     console.log(3 > '2')
    

    逻辑运算符

    短路:只存在于 && 和 || 中,当满足一定条件会让右边代码不执行

    符号短路条件
    &&左边为false就短路
    ||左边为true就短路

    原因:通过左边能得到整个式子的结果,因此没必要再判断右边

    运算结果:无论 && 还是 || ,运算结果都是最后被执行的表达式值,一般用在变量赋值

    有5个值是当 false 来看 其余是真的

    false   数字0   ''  undefined   null