Checking something isEmpty in Javascript?
如何检查javascript中的变量是否为空?对不起,这个愚蠢的问题,但我是一个新手在javascript!
1 2 3 4 5 | if(response.photo) is empty { do something else { do something else } |
如果要测试空字符串:
1 | if(myVar === ''){ // do stuff }; |
如果正在检查已声明但未定义的变量:
1 | if(myVar === null){ // do stuff }; |
如果正在检查可能未定义的变量:
1 | if(myVar === undefined){ // do stuff }; |
如果同时检查这两个变量,即变量为空或未定义:
1 | if(myVar == null){ // do stuff }; |
这是一个比你想象的更大的问题。变量可以通过很多方式清空。有点取决于你需要知道什么。
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 | // quick and dirty will be true for '', null, undefined, 0, NaN and false. if (!x) // test for null OR undefined if (x == null) // test for undefined OR null if (x == undefined) // test for undefined if (x === undefined) // or safer test for undefined since the variable undefined can be set causing tests against it to fail. if (typeof x == 'undefined') // test for empty string if (x === '') // if you know its an array if (x.length == 0) // or if (!x.length) // BONUS test for empty object var empty = true, fld; for (fld in x) { empty = false; break; } |
这应涵盖所有情况:
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 | function empty( val ) { // test results //--------------- // [] true, empty array // {} true, empty object // null true // undefined true //"" true, empty string // '' true, empty string // 0 false, number // true false, boolean // false false, boolean // Date false // function false if (val === undefined) return true; if (typeof (val) == 'function' || typeof (val) == 'number' || typeof (val) == 'boolean' || Object.prototype.toString.call(val) === '[object Date]') return false; if (val == null || val.length === 0) // null or 0 length array return true; if (typeof (val) =="object") { // empty object var r = true; for (var f in val) r = false; return r; } return false; } |
我在上面发布的许多解决方案中看到了潜在的缺点,所以我决定编译自己的解决方案。注意:它使用array.prototype.some,检查您的浏览器支持。
如果以下任一项为真,则下面的解决方案将变量视为空:
它是一个对象/数组,只包含本身为空的值(即分解为基元,它的每个部分等于
1 2 3 4 | isEmpty({"": 0}) // true isEmpty({"": 1}) // false isEmpty([{}, {}]) // true isEmpty(["", 0, {0: false}]) //true |
功能代码:
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 | /** * Checks if value is empty. Deep-checks arrays and objects * Note: isEmpty([]) == true, isEmpty({}) == true, isEmpty([{0:false},"",0]) == true, isEmpty({0:1}) == false * @param value * @returns {boolean} */ function isEmpty(value){ var isEmptyObject = function(a) { if (typeof a.length === 'undefined') { // it's an Object, not an Array var hasNonempty = Object.keys(a).some(function nonEmpty(element){ return !isEmpty(a[element]); }); return hasNonempty ? false : isEmptyObject(Object.keys(a)); } return !a.some(function nonEmpty(element) { // check if array is really not empty as JS thinks return !isEmpty(element); // at least one element should be non-empty }); }; return ( value == false || typeof value === 'undefined' || value == null || (typeof value === 'object' && isEmptyObject(value)) ); } |
参见http://underlinejs.org/isEmpty
isEmpty_uu.isEmpty(对象)如果可枚举对象不包含值(没有可枚举的自身属性),则返回true。对于字符串和类似数组的对象,isEmpty检查长度属性是否为0。
将@inkednm的答案组合成一个函数:
1 2 3 | function isEmpty(property) { return (property === null || property ==="" || typeof property ==="undefined"); } |
这样做怎么样?
这里有一个检查空变量的简单(简短)解决方案。此函数检查变量是否为空。提供的变量可以包含混合值(空、未定义、数组、对象、字符串、整数、函数)。
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 | function empty(mixed_var) { if (!mixed_var || mixed_var == '0') { return true; } if (typeof mixed_var == 'object') { for (var k in mixed_var) { return false; } return true; } return false; } // example 1: empty(null); // returns 1: true // example 2: empty(undefined); // returns 2: true // example 3: empty([]); // returns 3: true // example 4: empty({}); // returns 4: true // example 5: empty(0); // returns 5: true // example 6: empty('0'); // returns 6: true // example 7: empty(function(){}); // returns 7: false |
只需将变量放入if条件中,如果变量有任何值,它将返回true或false。
1 2 3 4 5 6 7 | if (response.photo){ // if you are checking for string use this if(response.photo =="") condition alert("Has Value"); } else { alert("No Value"); }; |
如果是空数组,我会缺少什么…无键对象…虚假const isEmpty=o=>array.isarray(o)&;!o.join('').length typeof o=='对象'&;&;!对象。键(O)。长度!(+值);
如果您要查找与php的
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 | function empty(mixed_var) { // example 1: empty(null); // returns 1: true // example 2: empty(undefined); // returns 2: true // example 3: empty([]); // returns 3: true // example 4: empty({}); // returns 4: true // example 5: empty({'aFunc' : function () { alert('humpty'); } }); // returns 5: false var undef, key, i, len; var emptyValues = [undef, null, false, 0, '', '0']; for (i = 0, len = emptyValues.length; i < len; i++) { if (mixed_var === emptyValues[i]) { return true; } } if (typeof mixed_var === 'object') { for (key in mixed_var) { // TODO: should we check for own properties only? //if (mixed_var.hasOwnProperty(key)) { return false; //} } return true; } return false; } |
http://phpjs.org/functions/empty:392
1 | if (myVar == undefined) |
将工作以查看var是否已声明但未初始化。
这取决于你所说的"空"是什么意思。最常见的模式是检查变量是否未定义。许多人还执行空检查,例如:
或者,以较短的形式:
检查是否未定义:
1 2 3 4 | if (typeof response.photo =="undefined") { // do something } |
这就相当于vb的
要检查变量或属性是否存在,例如它已声明,尽管它可能尚未定义,但可以使用
1 2 3 4 | if ("photo" in response) { // do something } |