js变量类型、传值、计算等基础总结

变量类型

存储地址,空间
基本数据类型存储在栈中,占空间大小固定undefined,null,boolean,number,string,symbol
引用数据类型存储在堆中,大小不固定,引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体对象

由于引用数据类型的特殊性,在函数传值时需要特别注意,来看以下例子:

		let obj = {
			name: 'liaof'
		}
		function foo(o) {
		 	o.name = 'liaox';
		}
		foo(obj);
		console.log(obj); 
		
		let obj1 = {
			name: 'liaof'
		}
		function foo1(o) {
			o = {
				name : 'liaoxin'
			}
		}
		foo1(obj1);
		console.log(obj1)

解答:js函数参数的传递形式–按值传递,传递的是地址
第一段代码:obj的地址传给o,o与obj指向同一个对象,因此会改变
第二段代码:后面把o指向了另一个对象,因此obj的指向没变

再来一个题目:

	var arr = []
    var obj = {a:1}
    arr.push(obj)
    console.log(arr)
    obj.a = 2
    console.log(arr)
    var obj1 = obj
    obj = {a:3}
    console.log(arr)
    obj1.a = 4
    console.log(arr)

你做对了吗?一定要把图画出来。1224

变量类型检测

typeof

	// 7种可能值
    typeof undefined === 'undefined'
    typeof 1 === 'number'
    typeof 's' === 'string'
    typeof function a() {} === 'function'
    typeof [] === 'object'
    typeof Symbol('s') === 'symbol'
    typeof true === 'boolean'

    // 需要注意的
    typeof null === 'object'
    typeof NaN === 'number'

instanceof

用于检测构造函数的原型是否出现在对象的原型链上

	function Person(name, age) {
      this.name = name
      this.age = age
    }
    let p = new Person('liaofang', 18)
    console.log(p instanceof Person)
    console.log(p instanceof Object)
手写instanceof
	function myInstanceof(left, right) {
      while(left) {
        if(left.__proto__ === right.prototype) {
          return true
        }
        left = left.__proto__
      }
      return false
    }

计算及逻辑

不同数据类型间进行加法的类型转换

数据先转换为number,然后转换为string(如果有string类型数据参与运算)
数据前有加号‘+’,可以让字符串转化为数字

原始数据类型number
booleantrue: 1, false: 0
undefinedNaN (要注意不是0)
null0
string相应的数字或者NaN
objectNaN

不同数据类型转为布尔

数据类型布尔值tip
string空字符串为false,其余为true字符串0/false 均 转为true
number0/+0/-0/NaN为false,其余为true
objecttrue空对象/空数组 均转为true
undefinedfalse
nullfalse

== 和 === 的一些特殊情况

==
  • null == undefined true
  • NaN == NaN false
===
  • null === null true

&& 和 ||

逻辑与和逻辑或作混合运算,与的优先级高

&&和||的短路运算,是指如果在进行前面的表达式的运算过程,通过判断已经明确的知道整个表达式的结果,那么就不会进行后面表达式的运算判断。
(然后返回值,不是转为boolean的值)

实际编程中常用的:

  1. if条件判断中 与和或 的使用
  2. 用于赋值 ||按顺序哪个为真就赋值哪个 经常用来判断一个变量是否已定义,如果没有定义就给他一个初始值 var Yahoo = Yahoo || {}
  3. 用于执行语句 a >= 5 && alert(“你好”)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值