JS-两个空数组为什么不相等?

var a = [], b = [];
console.log(a==b);

  控制台的打印结果是什么?答案是:false。

  接下来看解析:

  原始值的比较是值的比较:

    它们的值相等时它们就相等(==)

    它们的值和类型都相等时它们就恒等(===)。

  对象和原始值不同,对象的比较并非值的比较,而是引用的比较:

    即使两个对象包含同样的属性及相同的值,它们也是不相等的

    即使两个数组各个索引元素完全相等,它们也是不相等的

  举个栗子:

var o = {x:1}, p = {x:1};      // 具有相同属性的两个对象
o == p                        // => false: 两个单独的对象永不相等
var a = [], b = [];            // 两个单独的空数组
a == b                        // => false: 两个单独的数组永不相等

  我们通常将对象称为引用类型(reference type),以此来和JavaScript的基本类型区分开来。对象值都是引用(reference),对象的比较均是引用的比较:当且仅当它们引用同一个基对象时,它们才相等。

  举个栗子:

var a = [];  // 定义一个引用空数组的变量a
var b = a;   // 变量b引用同一个数组
b[0] = 1;    // 通过变量b来修改引用的数组
a[0]         // => 1: 变量a也会修改
a === b      // => true:a和b引用同一个数组,因此它们相等

原文地址:https://www.cnblogs.com/superlizhao/p/8944377.html

时间: 2024-11-09 00:01:14

JS-两个空数组为什么不相等?的相关文章

JS 两个一组数组转二维数组

一段简单的JS,把两个长度相同的一维数组转成二维数组 输入: arr1=['a','b','c']; arr2=[1,2,3]; 输出: arr=toTwoDimension(arr1,arr2); arr=[['a',1],['b',2],['c',3]] function toTwoDimension(arr1,arr2) { var arr = new Array(); for (var i = 0; i < arr1.length; i++) { arr.push([arr1[i],ar

JS空数组的判断

前言 最近在做一个mini项目,被大神各种鄙视,基础知识确实是不扎实,加油加油.好了,不多废话,抽空写写遇到的两个知识点,就记录下来,写博客还是能帮忙整理记录的,不然过了就忘记了. input监听值改变事件 1.onchange事件 开始使用的就是该事件,这个事件可以监听到input标签里面的值改变,但是有一个必须是当前元素失去了焦点(onblur)时才可以激活这个事件,所以有的时候体验很不好,如我的需求是input标签值不为空的时候,我的checkbox标签就可以点击了,这时就必须是在inpu

js空数组

首先我们定义一个空的数组: var a = [ ]; 数组a里面是空的没有值,接下来我们打印: console.log(!!a); 因为数组是空的,此处应该为false. 恰好相反,!!a为true. 但是,把空数组和布尔值比对后发现又出现了问题: var a = [ ]; a == true;//false a == false;//true 这是个非常具有迷惑性的问题,与我们的认知好像是相反的,总有哪里出了问题. 后来发现这个与ECMA(我也不知道这个具体是干嘛的,反正是官方的)规范有关,里

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不会同时为空. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 示例 1: nums1 = [1, 3] nums2

两个空对象(空数组)为什么不相等

var a = [], b = []; console.log(a==b); //控制台的打印结果是什么?答案是:false. 看解析: 原始值的比较是值的比较: 它们的值相等时它们就相等(==) 它们的值和类型都相等时它们就恒等(===). 对象和原始值不同,对象的比较并非值的比较,而是引用的比较: 即使两个对象包含同样的属性及相同的值,它们也是不相等的 即使两个数组各个索引元素完全相等,它们也是不相等的 举例: var o = {x:1}, p = {x:1}; // 具有相同属性的两个对象

js之二维数组定义和初始化三种方法

方法一:直接定义并且初始化,这种遇到数量少的情况可以用 var _TheArray = [["0-1","0-2"],["1-1","1-2"],["2-1","2-2"]] 方法二:未知长度的二维数组 var tArray = new Array();   //先声明一维 for(var k=0;k<i;k++){        //一维长度为i,i为变量,可以根据实际情况改变

JS学习第九天----数组

数组 前面说过,数组也是对象的一种,记得吗?啥叫数组我就不说了,数组的那些基本特征,在内存中怎样存储,在堆上还是栈上?还是其它.忘记了的自己脑补.不说了,那种编程语言都有数组,尽管数组并非非常好用,并且确定无数,可是数据是基础,相信每一个人都是在解除了数组以后才接触的更高级的容器,容器都是有哪些比較好用的?那种容器相应着那种不同的数据更为合适?自己脑补. 今天说的是JS中的数组(Array) 先看实例:创建数组 <script> var array=new Array(); array[0]=

寻找两个有序数组的中位数

题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2.          请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)).          你可以假设 nums1 和 nums2 不会同时为空.          示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 var findMedianSortedArrays = function(nums1, nums2) { var arr = Array

求两个有序数组的中位数

这是我做的第二个leetcode题目,一开始以为和第一个一样很简单,但是做的过程中才发现这个题目非常难,给人一种“刚上战场就踩上地雷挂掉了”的感觉.后来搜了一下leetcode的难度分布表(leetcode难度及面试频率)才发现,该问题是难度为5的问题,真是小看了它!网上搜了很多答案,但是鲜见简明正确的解答,唯有一种寻找第k小值的方法非常好,在此整理一下. 首先对leetcode的编译运行吐槽一下:貌似没有超时判断,而且small和large的数据集相差很小.此题一开始我采用最笨的方法去实现,利

js的学习 (数组)

数组元素的添加和删除 a.push()方法在数组末尾增加一个或多个元素 可以使用delete运算符来删除数组元素 delete操作不影响数组长度 Array.join()方法将数组中所有元素都转化为字符串并连接在一起,返回最后生成的字符串. var a = [1,2,3]; a.join(); //→"1,2,3" a.join(" "); //"1 2 3" Array.sort()方法将数组中的元素排序并返回排序后的数组.当不带参数调用sor