JavaScript基础:变量类型

JS的变量类型

在javascript规范中,定义了七种数据类型,分为值类型引用类型两大类.

  • 值类型
    数值(Number)、字符串(String)、布尔值(Boolean)、undefined、null、 Symbol(es6新增)
  • 引用类型
    对象(Object)、数组(Array)、函数(Function)

值类型和引用类型的区别

值类型
  • 保存在栈中,占用空间固定,使用后被销毁
    当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁了,因此,所有在方法中定义的变量都是放在栈内存中的
    注意: 栈中存储的是一些基础变量和对象的引用变量,基础变量的值是存储在栈中,而引用变量存储在栈中的是指向堆中的数组/对象的地址

  • 基本类型的值不可变

    let name = 'Aley'
    name.toLowerCase()  // aley
    console.log(name) // Aley
    
  • 保存与复制的是值本身

  • 使用typeof检测数据类型
    typeof识别所有值类型以及函数, 判断是否是引用类型

    let a
    typeof a  // undefined    
    typeof '123'  // string
    typeof 123  // number
    typeof true  // boolean
    typeof Symbol()  // symbol
    typeof null  // object
    typeof function() {}  // function
    typeof console.log  // function
    // 用typeof识别引用类型返回的都是 object, 除了函数
    typeof []  // object
    typeof {} // object
    
引用类型

引用类型可以说就是对象,对象是属性和方法的集合。也就是说引用类型可以拥有属性和方法,属性又可以包含基本类型和引用类型

  • 保存在堆中,占用空间不固定,使用后不一定被销毁,只有一个对象没有任何引用时,系统的垃圾回收机制才会回收销毁

  • 保存与复制的是指向对象的一个指针,该指针保存在栈中
    在这里插入图片描述

  • 使用instanceof检测数据类型
    如果变量是给定引用类型(根据它的原型链来识别)的实例,那么instanceof 操作符就会返回 true

    let obj = {}
    obj instanceof Array // false
    obj instanceof Object // true
    // 发现数组用instanceof不好区分
    [] instanceof Array  // true  
    [] instanceof Object // true
    // 检测数组
    Array.isArray([])
    或者
    if (!Array.isArray) {
      Array.isArray = function(arg) {
        return Object.prototype.toString.call(arg) === '[object Array]';
      }
    } 
    
  • 使用new()方法构造出的对象是引用型

类型转换

  • 字符串拼接
    字符串转数值: ‘100’ * 1
    数值转字符串: 100 + ‘’

    let a = 100 + 10  // 110: ''不要写成' ',否则 字符串长度会加1
    let b = 100 + ''  // '100'
    let c = '100' * 1  // 100  
    typeof c  // number
    
  • ==(不考虑变量类型) 和 ===(考虑变量类型)
    除了== null之外,其他一律用 ===

    100 == '100' //true
    100 === '100' //false
    0 == '' //true
    null == undefined //true
    
    const obj = {x: 100}
    if (obj.a == null) {} 相当于 if (obj.a === null && obj.a === undefined) {}
    
  • if语句

    let a = true
    if(a){}
    let b = 100
    if(b){} // 把数字转换为true
    let c = ''
    if(c){} // 把空字符串转换为false
    
  • 逻辑运算
    除 0, ’ ', false, NaN, null, undefined是falsely变量,其余都是truely变量

    console.log(10&&0); // 0    把10转换成true
    console.log('' || 'abc'); // 'abc'   把空字符串转换为false
    console.log(!window.abc); //true     window.abc是undefined 把非undefined转换成true
    
    //判断一个变量会被当做true还是false
    let a = 100
    console.log(!!a); // true
    
发布了6 篇原创文章 · 获赞 6 · 访问量 191

猜你喜欢

转载自blog.csdn.net/qq_35387720/article/details/105566291
今日推荐