学习笔记:JS的变量类型相关知识及判断方式

变量类型

  • 值类型:变量在内存中分配了地址,值直接存放在内存中,值类型变量变化不会影响赋值的其他变量。
  • 引用类型:变量是指针,指向了对象,对象数据结构可能比较复杂,节省了空间,引用类型变量变化会影响到赋值的其他变量。
  • js是根据存储方式来区分变量类型
	// 值类型:
    var a = 10;
    var b = a;
    a = 20;
    log(b); // 10,值类型变量变化不会影响赋值的其他变量

    // 引用类型:a可以理解为指针,指向了对象{age:20},b同为指针,指向了相同的空间地址,一个指针变量改变了对象的值,必定会对其他指向该空间地址的变量产生影响
    var a = {age: 10};
    var b = a;
    a.age = 20;
    log(b.age); // 20,引用类型变量变化会影响到赋值的其他变量。
  • 其他:引用类型可以扩展属性,值类型就不可以:
	// 值类型变量不可以扩展属性
	var a = 3;
    a.name = 'z';
    log(a.name); // undefined

    // 引用类型就可以扩展属性
    var a = {age: 2};
    a.name = "z";
    log(a); // {age: 2, name: "z"}

    // 数组作为引用类型,也可以扩展属性,函数也是可以扩展属性
    var a = [1,2,3];
    a.name = 'z';
    log(a); // [1,2,3, name: 'z'],神奇吧,但是一般不会用到

typeof运算符

  1. typeof 可以区分值类型变量和引用类型变量
  2. 其中值类型变量可以区分出undefined/string/number/boolean
  3. 引用类型变量只可区分出object/function
  • typeof undefined // undefined
  • typeof ‘a’ // string
  • typeof 1 // number
  • typeof true // boolean
  • typeof {} // object
  • typeof [] // object
  • typeof console.log //function

变量计算 - 强制类型转换

什么时候会发生类型转换?

  • 字符串拼接
    var a = 1+ 1 // 2
    var b = 1 + '1' // 11
  • == 运算符

尽量使用===,因为js会尽量比较不同类型的变量,就会导致类型发生转换:

	100 == '100'  // true 发生类型转换,100转换为了'100'
    0 == ''  // true 会把0和''变为false
    null == undefined // true 会把null和undefined变为false
  • if语句
	var a = true;
    if(a){
    	// 会执行
    }
    
    var b = 100;
    if(b){
    	// 会执行,会把100变为true来对待
    }
    
    var c = '';
    if(c){
    	// 不会执行,''会变为false对待
    }
    
    var d = 0 / NaN / '' / null / undefined / false
    if(d){
    	// 都不会执行,都会当做false处理
    
    }
  • 逻辑运算
	log(1 && 0) // 打印0,因为会把1当做true对待,所以打印后边的0
    log('' || 'abc') // 打印'abc',因为''会变为false,||就为短路运算符,所以会打印abc
    log(!window.abc) // true,因为abc没有定义,所以window.abc为false,然后加上!打印true

什么时候用==什么时候用===?

===不会进行强制类型转换

  • 判断对象中某个属性存在不存在,用==
	if(obj.a == null){
    	// 相当于obj.a === null || obj.a === undefined的简写
        // 是jQuery源码中推荐的写法
    }
    
    
    // 或者判断函数的参数时候可以用==,前提是a一定要定义好
    function(a, b){
   		if(a == null){
           判断函数的参数时候可以用==
    	}
    }
  • 出了上述情况之外,都可以用===,即判断string、number、boolean、undefined时候用===

JS中有哪些内置函数

  • Object
  • Array
  • Boolean
  • Number
  • String
  • Function
  • Date
  • RegExp
  • Error
  • Math

如何理解Json

  1. JSON也是一种数据格式
  2. JSON其实也算是JS对象而已,提供了API,JSON.Stringify和JSON.parse
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值