js 判断空数组,空对象!】的更多相关文章

var attr1 = [ ]; var obj1 = { }; console.log(isEmpty(attr1)); console.log(isEmpty(obj1)); function isEmpty(obj) { if (!obj && obj !== 0 && obj !== '') { // 检验 undefined 和 null return true; } if (Array.prototype.isPrototypeOf(obj) &&…
javascript里判断空数组不能用 []==[] 这样来判断,因为数组也是个对象,普通对象通过指针指向的内存中的地址来做比较 所以 []==[]结果为false,因此判断数组是否为空 用 [].length 就可以了…
最近项目遇到判断空对象的一个问题,查阅相关资料再进行总结一下. 判断空对象不比判断空字符串之类的,因为空对象也是一个对象,需要单独分配内存,而不是像字符串那样为空时就是大锅饭,大家都相等,如下代码: 如上代码可以发现,无论是通过对象字面量方式创建的空对象还是通过Object构造函数创建的空对象,彼此之间都是不相等的. 1.将对象转换为字符串进行比较 这种方法很不推荐,但也确实是最容易想到的,主要使用JSON.stringify()这个方法对对象进行强转,贴出来仅供一看: var a={}; va…
当需要判断参数是否为空时,总希望 js 能够提供原生的判断方法,可惜并没有,只能自己封装了. function isEmpty(obj) { // 检验 undefined 和 null if(!obj && obj !== 0 && obj !== '') { return true; } if(Array.prototype.isPrototypeOf(obj) && obj.length === 0) { return true; } if(Objec…
我们在JS程序中需要进行频繁的变量赋值运算,对于字符串.布尔值等可直接使用赋值运算符 “=” 即可,但是对于数组.对象.对象数组的拷贝,我们需要理解更多的内容. 首先,我们需要了解JS的浅拷贝与深拷贝的区别. 我们先给出一个数组: var arr = ["a","b"]; 现在怎么创建一份arr数组的拷贝呢?直接执行赋值运算吗?我们来看看输出结果 var arrCopy = arr; arrCopy[1] = "c"; arr // =>…
我们在JS程序中需要进行频繁的变量赋值运算,对于字符串.布尔值等可直接使用赋值运算符 “=” 即可,但是对于数组.对象.对象数组的拷贝,我们需要理解更多的内容. 首先,我们需要了解JS的浅拷贝与深拷贝的区别. 我们先给出一个数组: var arr = ["a","b"]; 现在怎么创建一份arr数组的拷贝呢?直接执行赋值运算吗?我们来看看输出结果 var arrCopy = arr; arrCopy[1] = "c"; arr // =>…
主要思路 我们要考虑到的主要有:js原生对象,宿主对象(浏览器上面的). 首先对于宿主对象 主要判断是DOM 对象 和是否是window 对象 是否是DOM对象  value.nodeType 是否存在. 是否是window 对象,value != null  && value === value.window; 对于这两种肯定不是空对象. if(value.nodeType || isWindow(value)){ return false; } 对于js原生对象 是否本身返回就是fal…
之前的文章梳理了JS数组与对象属性的遍历方法,本文介绍专门用以遍历并处理数据的map()方法. 一.原生map() map()是数组的一个方法,它创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果.map()里面的处理函数接受三个参数,分别指代当前元素.当前元素的索引.数组本身.(IE9以下不支持,对老旧浏览器的兼容性方法参考这里) /**** 原生map() ****/ var arrTmp = [1,2,3]; var arrDouble = arrTmp.map(f…
1.标准的for循环遍历数组 //不打印自定义属性和继承属性 var array = [1,2,3]; for (var i = 0; i < array.length; i++) { console.log(array[i]); } 2.for in 遍历对象 不要用for in遍历数组,因为还会打印自定义属性和继承属性 一般常用来遍历非数组的对象并且使用hasOwnProperty()方法去过滤掉原型链上的属性 数组的key是string类型,因为js中一切皆为对象. var array =…
1,for循环 对于循环应该是最常用的一种遍历方式了,通常用来遍历数组结构. let arr = [a,b,d];for (let i=0; i<arr.length; i++){ console.log(i,arr[i]);} 2,for...in循环 for...in语句用于对数组或者对象的属性进行循环操作. for...in循环中的代码每执行一次,就会对数组或者对象的属性进行一次操作. let obj={'name':'programmer','age':'22','height':'18…
let obj = { "2": "a", "3": "b", length: 3, push: Array.prototype.push }; obj.push("c"); console.log(obj); 浏览器执行以上脚本后的结果 { "2": "a", "3": "c", length: 4, push: Array.…
首先,回忆一下,访问对象属性一共有两种方法:点获取法和方括号获取法.而我们最常用的就是点获取法了.但是当我们遇到需要给对象动态添加属性和属性值时,点获取法好像就不太好用了,尤其是我们不知道属性名的时候更不好办.这时候,方括号获取法就派上用场了.下面,来看一个例子,就一目了然了. 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> &l…
js 空数组是true还是false   1 2 var arr = new Array(); // 或 var arr = []; 我们知道,初始化后,即使数组arr中没有元素,也是一个object. 1 2 typeof arr; // "object" 既然是object,用于判断条件时就会被转化为true 1 2 if(arr)console.log("it's true"); // it's true 但是,如果将arr与布尔值比较: 1 2 3 4 ar…
我的第一篇博客 ——JS的那些基础概念 第一次写,也不知道有没有什么套路,需不需要注意文采之类的.不管了,我就直接写主要内容吧!下面是我总结的一些关于JS的基础概念: [变量]从字面上面,变量是可变的量:从编程角度讲,变量是用于存储某些/某种数值的存储器.我们可以把变量看作一个盒子用来存储物品. [数组]变量用来存储数据,一个变量只能存储一个内容.如果你想存储多个内容,那么就可以用数组解决,一个数组变量可以存放多个数据,好比一个团,团你有很多人.数组是一个值得集合,每个值都有一个索引号,从0开始…
数组的拷贝 > 数组的深拷贝,两层 var arr = [[1,2,3],[4,5,6],[7,8,9]]; var arr2 = []; 循环第一层数组 for(var i=0,len=arr.length;i<len;i++){ 循环第二层数组 for(var k=0,lens=arr[i].length;k<lens;k++){ 把每一个数组的内容添加到数组2中 arr2.push(arr[i][k]); } } console.log(arr2); //[1, 2, 3, 4,…
代码 function isEmpty(obj) { if (obj === null) return true; if (typeof obj === 'undefined') { return true; } if (typeof obj === 'string') { if (obj === "") { return true; } var reg = new RegExp("^([ ]+)|([ ]+)$"); return reg.test(obj); }…
js 判断空对象 首先要区分一个概念,空对象和空引用: 空对象:{}是指不含任何属性的对象,当然对象属性包括字面值和函数. 空引用:obj=null 是指变量值指向null变量,当然在js默认不赋值的情况下,一个变量为undefined. 空对象的讨论: 原型: 原型上包括了继承属性,有可以枚举的属性和不可以枚举的属性.默认对象都继承了Object. 自身: 自身属性同样包括了可枚举的属性和不可枚举的属性. 限定场景: 后台JSON对象: 判断后台传来的对象为空对象,此时,该对象一般为JSON对…
javascript 数组以及对象的深拷贝(复制数组或复制对象)的方法 前言 在js中,数组和对象的复制如果使用=号来进行复制,那只是浅拷贝.如下图演示:  如上,arr的修改,会影响arr2的值,这显然在绝大多数情况下,并不是我们所需要的结果. 因此,数组以及对象的深拷贝就是javascript的一个基本功了. 数组的深拷贝 条条大道通罗马,实现数组的深拷贝,是有好几种方法的.举例如下: for 循环实现数组的深拷贝 for循环是非常好用的.如果不知道高级方法,通过for循环能够完成我们大多数…
前言 for,slice(0),concact() 在js中,数组和对象的复制如果使用=号来进行复制,那只是浅拷贝.如下图演示:  如上,arr的修改,会影响arr2的值,这显然在绝大多数情况下,并不是我们所需要的结果. 因此,数组以及对象的深拷贝就是JavaScript的一个基本功了. 数组的深拷贝 条条大道通罗马,实现数组的深拷贝,是有好几种方法的.举例如下: for 循环实现数组的深拷贝 for循环是非常好用的.如果不知道高级方法,通过for循环能够完成我们大多数的需求. var arr…
(function(){//去除数组中重复对象 var unique = {}; arr.forEach(function(a){ unique[ JSON.stringify(a) ] = 1 }); arr= Object.keys(unique).map(function(u){return JSON.parse(u) }); return arr})(arr)_ let newArr=[];//去除空对象for(let j in arr){ for(let prop in arr[j])…
判断是对象还是数组  var ids={ id:'1',num:'2' } if(Array.isArray(ids) == false) {console.log('不是数组,对象') } else if(Array.isArray(ids) == true) {console.log(‘数组’) } 判断对象是否为空 var c = {}; if(JSON.stringify(c) == "{}"){ console.log('空'); }esle{ console.log('不为…
最近在项目开发中判断空对象时,用了“!”运算符,结果程序出现bug,找了好久才找到原因. 其实自己范了一些低级错误,现在把自己经验总结一下: 在JavaScript中,任意JavaScript的值都可以转换为布尔值. 下面这些值会被转换成false: undefined.null.0.-0.NaN.“”(空字符串). NaN--表示非数字值.无穷大除以无穷大.给任意负数作开方运算或者算术运算符与不是数字或无法转换为数字的操作数一起使用时都将返回NaN. 判断一个值是否为NaN方法:1.x!=x返…
js怎样推断一个对象{}是否为空对象,没有不论什么属性 前段时间用js写了一个相似"angularjs"用于数据绑定的东西,功能是比較简单了, 通常应该传进来的是一个ArrayList JSON对象数组, 但有时候通过AJAX方法调用返回的是一个JSON对象,而不是数组! 为了兼容这样的情况使用了下面代码: if (typeof model.rows === "object" && !(model.rows instanceof Array)){ m…
js常用数据类型 数字类型 | 字符串类型 | 未定义类型 | 布尔类型 typeof()函数查看变量类型 数字类型  Number var a1 = 10; var a2 = 3.66; console.log(typeof(a1)) console.log(typeof(a2)) 字符串类型  String var s1 = "hello word"; var s2 = '456'; 未定义类型   undefined var = a var u1 = undefined 布尔类型…
1.空对象.空引用以及undefined三种概念的区别 空对象:是对象,但它的值是指向没有任何属性的对象的引用, {}是指 不含任何属性 的对象,当然对象属性包括 字面值和函数: 空引用:obj=null 是指  变量值指向null变量  ,null是对象,但是空引用(不指向任何对象): var a = null; console.log(typeof null); //object console.log(); console.log(); undefined:未定义,所以不是对象,本身被定义…
定义这么一个js的“关联数组”: var arr = new Array(); arr[; arr[; alert(JSON.stringify(arr)); 得到的结果如图: [] 一句话,你的 arr 是有两个属性的空数组,数组转字符串当然是展示数组的内容,不会去遍历数组的属性!下面解释: js不支持这种关联数组的形式但为什么可以取值呢? 因为数组本身也是对象,特殊的对象, var arr = new Array(); arr['school'] = 1; arr['team'] = 2;…
转载地址:http://blog.csdn.net/wangyuchun_799/article/details/38460515 引言 这篇文章的主要目的是讲解JavaScript数组和对象的混合使用,由于JS的弱检查特性,因此在JS数组中可以同时存储不同类型的变量,比如你可以把数字.字符串.字符.对象等内容放在同一个数组中.对象也可以做同样的事情,区别是对象可以指定对象里每一个成员的别名,这样在编程的时候数据更易读,比如: var arr1 = ["飞鱼", 25, 172, &q…
数组分为索引数组和关联数组 js中先声明一个空数组 arr = [] 索引数组 索引是整数,如arr[0] = 'a' 关联数组 索引是自定义的字符串,如arr['a'] = 'a' js中的对象 你把它理解成关联数组就可以了 场景 自定义键值的时候使用 js中的数组 只支持索引数组 场景 需要传输多组数据 怎样在js中使用关联数组? 在js中的数组不支持关联数组arr['a'] = 'a' 如果想使用关联数组,可以用对象替换arr.a = 'a' 实践 使用ajax传多组数据 var good…
在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如:JSON字符串:var str1 = '{ "name": "cxh", "sex": "man" }';JSON对象:var str2 = { "name": "cxh", "sex": "man"…
JS一般判断对象是否为空,我们可以采用: if(!x)的方式直接判断,但是如果是一个空对象,比如空的JSON对象,是这样的:{},简单的判断是不成功的,因为它已经占用着内存了,如果是JQuery的话,直接使用isEmptyObject()来判断,如果是JS,可以采取下面的方法1: /* * 检测对象是否是空对象(不包含任何可读属性). //如你上面的那个对象就是不含任何可读属性 * 方法只既检测对象本身的属性,不检测从原型继承的属性. */ function isOwnEmpty(obj) {…