Vue进阶(幺贰贰):ES6 判断是否为空对象及属性包含_es6 判断数据是否为{} ...

打印 上一主题 下一主题

主题 632|帖子 632|积分 1896

  1. var data = {};
  2. var b = (JSON.stringify(data) == "{}");
  3. alert(b);//true
复制代码
2.3 for in 循环判断

  1. var obj = {};
  2. var b = function() {
  3.   for(var key in obj) {
  4.     return false;
  5.   }
  6. return true;
  7. }
  8. alert(b());//true
复制代码
2.4 jquery isEmptyObject()

此方法是jquery将方法3 (for in)举行封装,使用时必要依赖jquery。
  1. var data = {};
  2. var b = $.isEmptyObject(data);
  3. alert(b);//true
复制代码
2.5 Object.getOwnPropertyNames()

此方法是使用Object对象的getOwnPropertyNames方法,获取到对象中的属性名,存到一个数组中,返回数组对象,我们可以通过判断数组的length来判断此对象是否为空。
注意:此方法不兼容ie8,别的浏览器没有测试。
  1. var data = {};
  2. var arr = Object.getOwnPropertyNames(data);
  3. alert(arr.length == 0);//true
复制代码
三、属性识别

3.1 应用 !==

最简单的方法,就是使用“!==”举行判断,这种方法在工作中很常见,可以根据该方法可以判断继承来的属性。
  1. let obj = { x: 1 };
  2. obj.x !== undefined;   // true 有x属性
  3. obj.y !== undefined;   // false 无y属性
  4. obj.toString !== undefined;   // true 从Object继承toString属性
复制代码
3.2 使用 in 运算符

in 的语法是: attr in obj , 同样,该表达式也返回一个布尔值。
  1. let obj = { x: 1 };
  2. 'x' in obj;             // true
  3. 'y' in obj;             // false
  4. 'toString' in obj;      // true
复制代码
in运算符语法很简单,效果跟undefined是相同的,与undefined不同的是,in可以区分存在但值为undefined的属性。
  1. let obj = { x: undefined };
  2. obj.x !== undefined;            // false
  3. 'x' in obj;                     // true
复制代码
可以看出,如果属性的值为undefined的时候,使用 !== 的方法就不收效了,以是在工作中必要注意一下这一块。
3.3 应用 hasOwnProperty()

应用对象的 hasOwnProperty() 方法也可以检测指定属性名是否在对象内,同样返回是布尔值, 当检测属性为自有属性(非继承)的时候返回true。
  1. let obj = { x: 1, abc: 2 };
  2. let a = 'a';
  3. let b = 'bc';
  4. obj.hasOwnProperty('x');               // true 包含
  5. obj.hasOwnProperty('y');               // false 不包含
  6. obj.hasOwnProperty('toString');        // false 继承属性
  7. obj.hasOwnProperty(a + b);             // true 判断的是属性abc
复制代码
in 运算符和 hasOwnProperty() 的区别就在于 in 运算符可以判断来自继承的属性,而hasOwnProperty() 不能。针对这一点在工作中加以运用照旧很有帮助的。
3.4 应用 propertyIsEnumerable()

propertyIsEnumerable() 是hasOwnProperty() 的增强版,用法与hasOwnProperty()相同,但当检测属性是自有属性(非继承)且这个属性是可枚举的,才会返回true。
那么什么是可枚举属性?普通的讲就是可以通过for...in遍历出来的属性就是可枚举属性。通常由JS代码创建出来的属性都是可枚举的。
  1. let obj = Object.create({x: 1});   // 通过create()创建一个继承了X属性的对象obj
  2. obj.propertyIsEnumerable('x');     // false x是继承属性
  3. obj.y = 1;                        // 给obj添加一个自有可枚举属性y
  4. obj.propertyIsEnumerable('y');    // true
  5. Object.prototype.propertyIsEnumerable('toString'); // false 不可枚举
复制代码
3.5 Object.keys()

会返回一个对象自身的可枚举属性的名字,类型为一个数组。
  1. let obj = { x: 1 };
  2. Object.defineProperty(obj, 'test', {
  3.     value: 'testVal',
  4.     enumerable: false,
  5.     writable: true,
  6.     configurable: true
  7. });
  8. let arr = Object.keys(obj);
  9. arr.includes('x');  // true
  10. arr.includes('test');  //false
复制代码
跳槽是每个人的职业生活中都要履历的过程,不论你是搜索到的这篇文章照旧偶然中浏览到的这篇文章,盼望你没有白白浪费停留在这里的时间,能给你接下来或者以后的笔试口试带来一些帮助。
大概是互联网未来10年中最好的一年。WINTER IS COMING。但是如果你不真正的自己去实行实行,你永远不知道市面上的行情怎样。这次找工作下来,我自身感觉市场并没有那么可怕,也拿到了几个大厂的offer。在此举行一个总结,给自己,也盼望能帮助到必要的同学。
口试预备

口试预备根据每个人把握的知识不同,预备的时间也不一样。现在对于前端岗位,以前大概不是很重视算法这块,但是现在许多公司也都会考。建议各人平时有空的时候多刷刷leetcode。算法的预备时间比力长,是一个恒久的过程。必要在把握了大部分前端基础知识的环境下,再有针对性的去复习算法。口试的时候算法能做出来肯定加分,但做不出来也不会一票否决,口试官也会给你提供一些思路。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

何小豆儿在此

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表