全网首发 JavaScript历史遗留问题补充说明

        一般的底层语言在声明变量时会要求说明变量类型,JavaScript这里不用。弱类型语言;高级语言;创造之初留下的问题

栈:原始数据类型(Undefined、Null、Boolean、Number、String)

堆:引用数据类型(对象、数组和函数)

两种类型的区别是:存储位置不同。原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。

引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定。如果存储在栈中,将会影响程序运行的性能;引用数据类型在

栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。栈区内存由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆区内存一般由程序员分配释放,若程序员不释放,程序结束时可能由垃圾回收机制回收。

    // [] == []	// false
	// [] < []	// false
	// [] > []	// false
	// [] <= []	// true
	// [] >= []	// true
	
	// Math.min()					// Infinity
	// Math.max()					// -Infinity
	// Math.min() > Math.max()		// true
	
// 	NaN 是一个特殊值,它和自身不相等,是唯一一个非自反(自反,reflexive,即 x === x 不成立)的值。而 NaN != NaN为 true。


	// typeof NaN					// 'number'
	// typeof null					// 'object'
	// Number({})					// NaN		//转换规则
	// Number([])					// 0		//转换规则
	// Number('')					// 0
	// Number(true)				    // 1
	// Number(false)				// 0
	// Number(null)				    // 0
	// Number(undefined)			// NaN		//特殊情况
	// Boolean([])					// true		//地址转换
	// Boolean({})					// true		//地址转换

	// true - []		// 1
	// true + []		// 'true'
	// [] + []			// ''
	// {} + {}			// NaN
	// {} + []			// 0
	// [] + {}			// '[object Object]'
	// {} toString 的结果为 “[object Object]”

    在JavaScript中,这两行代码的结果确实会有所不同:

    {} + [] 会返回 0,这是因为它被解释为一个空块({})后紧跟着一个数组([]),JavaScript 将其视为一个代码块,然后忽略了这个代码块并计算了 + [],这相当于将一个空数组转换成数字,结果为 0。[] + {} 会返回 '[object Object]',这是因为它被解释为一个空数组([])后紧跟着一个对象字面量({}),JavaScript 将其视为字符串拼接的操作,因此将空数组转换成空字符串,然后将对象字面量转换成字符串 '[object Object]',最终结果为 '[object Object]'。这些奇怪的结果是由于 JavaScript 的类型转换规则和运算符的行为导致的。

    在 JavaScript 中,加法运算符 + 既可以用于数字相加,也可以用于字符串拼接,具体的行为取决于运算符的操作数.

	// null == undefined	// true
	// null == 0			// false
	// null == ''			// false
	// null == []			// false
	// null == false		// false

因此,根据操作数的不同,+ 运算符会有不同的行为。

   

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值