1. 使用 in
关键字。可以判断对象的自有属性和继承属性。
1 2 3 4 |
var o = { x: 1 }; "x" in o; // true,自有属性 "y" in o; // false "toString" in o; // true,继承属性 |
2. 使用对象的
hasOwnProperty() 方法。只能判断自有属性是否存在,对于继承属性会返回 false
。
1 2 3 4 |
var o = { x: 1 }; o.hasOwnProperty("x"); // true,自有属性中有 x o.hasOwnProperty("y"); // false,自有属性中不存在 y o.hasOwnProperty("toString"); // false,这是一个继承属性,但不是自有属性 |
3. 使用 undefined
判断。自有属性和继承属性均可判断。
1 2 3 4 |
var o = { x: 1 }; o.x !== undefined; // true o.y !== undefined; // false o.toString !== undefined; // true |
该方法存在一个问题,如果属性的值就是 undefined
的话,该方法不能返回想要的结果,如下。
1 2 3 4 |
var o = { x: undefined }; o.x !== undefined; // false,属性存在,但值就是 undefined o.y !== undefined; // false o.toString !== undefined; // true |
4. 在条件语句中判断
1 2 3 |
var o = {}; if(o.x) o.x++; // 如果 x 是 undefine, null, false, " ", 0 或 NaN,它将保持不变 |
之所以要汇总以上信息,是因为前两天在和 CSDN 的垃圾页面作斗争,写了以下油猴插件,试图干掉它的那个阅读全文的按钮。在 Windows 下的 Firefox 里一直有问题,但让朋友测试,反馈说可以正常工作。简直要怀疑人生。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
// ==UserScript== // @name CSDN // @namespace http://tampermonkey.net/ // @version 0.1 // @description CSDN 博客解除阅读更多限制 // @author You // @match https://blog.csdn.net/* // @grant none // ==/UserScript== (function () { var count = 120; function expand(){ var ok = false; if (window.csdn) { console.log("window.csdn found."); if (window.csdn.clearReadMoreBtn) { window.csdn.clearReadMoreBtn(); console.log("window.csdn.clearReadMoreBtn called."); ok = true; } else { console.log("window.csdn.clearReadMoreBtn NOT found."); } } else { console.log("window.csdn NOT found."); } console.log("expand", ok, count); if(!ok && --count){ setTimeout(expand, 1000); } } expand(); })(); |