Kiểm tra một cái gì đó isEmpty trong Javascript?


83

Làm cách nào để kiểm tra xem một biến có trống trong Javascript không? Xin lỗi vì câu hỏi ngu ngốc, nhưng tôi là người mới trong Javascript!

if(response.photo) is empty {
    do something
else {
    do something else
}

response.photolà từ JSON và đôi khi nó có thể trống, các ô dữ liệu trống! Tôi muốn kiểm tra xem nó có trống không.


2
"Trống rỗng" ở đây nghĩa là gì? Nếu bạn không chắc chắn, hãy cho chúng tôi xem một số mã.
thejh

1
Ý bạn là nếu nó chưa được khởi tạo?
Franz Payer

1
Ý bạn là liệu nó có đánh giá falsekhông?
Felix Kling

2
Ý bạn là nếu nó là chuỗi rỗng?
Đánh dấu Byers

Đây là cách triển khai JavaScript của hàm PHPs empty(), theo cách dễ đọc hơn. stackoverflow.com/a/33319704/3779853
phil294

Câu trả lời:


131

Nếu bạn đang kiểm tra một chuỗi trống:

if(myVar === ''){ // do stuff };

Nếu bạn đang kiểm tra một biến đã được khai báo nhưng chưa được xác định:

if(myVar === null){ // do stuff };

Nếu bạn đang kiểm tra một biến có thể không được xác định:

if(myVar === undefined){ // do stuff };

Nếu bạn đang kiểm tra cả hai nghĩa là, một trong hai biến là null hoặc không xác định:

if(myVar == null){ // do stuff };

4
Đừng sử dụng undefined"hằng số", vì nó không phải là hằng số. Sử dụng typeof myVar === 'undefined'thay thế.
Guffa

3
Không. Nếu một biến đã được khai báo nhưng không được định nghĩa thì nó không phải là null ... nó không được xác định. Nếu bạn kiểm tra một biến chưa được khai báo, bạn sẽ gặp lỗi thời gian chạy. Ngoài ra, var undefined = 1;sẽ phá vỡ ví dụ thứ ba của bạn. Luôn sử dụng typeofvà kiểm tra "undefined".
gilly3

@Jhon Woodwrick: Đó sẽ là trường hợp đầu tiên, chuỗi rỗng.
thejh

2
if(typeof variable === "undefined")
ncubica

Cảm ơn sự giúp đỡ của bạn
phani

52

Đây là một câu hỏi lớn hơn bạn nghĩ. Các biến có thể làm trống theo nhiều cách. Kinda phụ thuộc vào những gì bạn cần biết.

// 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;
}

@Tomalak Rất tiếc, cảm ơn. Tôi nghĩ rằng bộ ba bằng mặc dù là tùy chọn. Loại sẽ trả về một chuỗi, không có gì sẽ bị ép buộc.
Hemlock

Đúng. Dù sao thì việc kiểm tra danh tính cũng không hại gì, tôi đoán vậy. :-)
Tomalak

1
(! x) cũng sẽ đúng với NaN và []. (x == null) là một thử nghiệm cho null hoặc không xác định.
Patrick Fisher

1
Đúng vậy, tôi đã quên mất NaN. Tôi không nhận ra rằng thử nghiệm cho null hoạt động giống như thử nghiệm cho không xác định. !xkhông đúng với một mảng trống.
Hemlock

11

Điều này sẽ bao gồm tất cả các trường hợp:

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;
}

5

Tôi thấy những thiếu sót tiềm ẩn trong nhiều giải pháp được đăng ở trên, vì vậy tôi quyết định biên dịch cho riêng mình.
Lưu ý: nó sử dụng Array.prototype.some , hãy kiểm tra hỗ trợ trình duyệt của bạn.

Giải pháp dưới đây coi biến trống nếu một trong những điều sau là đúng:

  1. JS nghĩ biến đó là tương đương với false, mà đã bao gồm nhiều thứ như 0, "", [], và thậm chí [""][0]
  2. Giá trị là nullhoặc loại của nó là'undefined'
  3. Nó là một đối tượng rỗng
  4. Nó là một Đối tượng / Mảng chỉ bao gồm các giá trị tự trống (nghĩa là được chia nhỏ thành các phần nguyên thủy mà mỗi phần của nó bằng nhau false). Kiểm tra đệ quy mũi khoan vào cấu trúc Đối tượng / Mảng. Ví dụ

    isEmpty({"": 0}) // true
    isEmpty({"": 1}) // false
    isEmpty([{}, {}])  // true
    isEmpty(["", 0, {0: false}]) //true
    

Mã chức năng:

/**
 * 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))
  );
}

Đẹp. Bạn có thể chỉ ra sự khác biệt và cách nó đáp ứng những thiếu sót mà bạn đã xác định.
Shawn Mehan

1
Tôi sẽ cần phải lặp lại tất cả các quyết định ở đây. Đồng ý. So với @victorkohl và @kapa, các hàm của tôi có thể đi sâu hơn cấp độ đầu tiên và báo cáo các đối tượng phức tạp trông không trống nhưng thực sự chỉ bao gồm các giá trị giống như trống. Ví dụ: [{},0,""]. Tất cả các giải pháp khác ở đây chỉ là hai dấu gạch ngang không đi xa và một hàm gạch dưới hoạt động cho các Đối tượng và yêu cầu lib.
Oleksii Chekulaiev

4

Đây là giải pháp đơn giản nhất của tôi.

Lấy cảm hứng từ hàm PHP empty

function empty(n){
	return !(!!n ? typeof n === 'object' ? Array.isArray(n) ? !!n.length : !!Object.keys(n).length : true : false);
}

//with number
console.log(empty(0));        //true
console.log(empty(10));       //false

//with object
console.log(empty({}));       //true
console.log(empty({a:'a'}));  //false

//with array
console.log(empty([]));       //true
console.log(empty([1,2]));    //false

//with string
console.log(empty(''));       //true
console.log(empty('a'));      //false


3

Xem http://underscorejs.org/#isEmpty

isEmpty_.isEmpty (đối tượng) Trả về true nếu một đối tượng có thể liệt kê không chứa giá trị (không có thuộc tính riêng có thể liệt kê). Đối với các chuỗi và các đối tượng dạng mảng, _.isEmpty kiểm tra xem thuộc tính length có bằng 0 hay không.


3

Kết hợp các câu trả lời từ @inkednm thành một hàm:

   function isEmpty(property) {
      return (property === null || property === "" || typeof property === "undefined");
   }

Sử dụng property == nullđể đăng ký kết hợp nullundefined
SJ00

3

Kiểm tra trống trên khóa của JSON tùy thuộc vào trường hợp sử dụng. Đối với một trường hợp sử dụng phổ biến, chúng tôi có thể kiểm tra những điều sau:

  1. không phải null
  2. không phải undefined
  3. Không phải là một chuỗi trống ''
  4. Không phải là một đối tượng rỗng {} [] (Mảng là một đối tượng)

Chức năng:

function isEmpty(arg){
  return (
    arg == null || // Check for null or undefined
    arg.length === 0 || // Check for empty String (Bonus check for empty Array)
    (typeof arg === 'object' && Object.keys(arg).length === 0) // Check for empty Object or Array
  );
}

Trả về true cho:

isEmpty(''); // Empty String
isEmpty(null); // null
isEmpty(); // undefined
isEmpty({}); // Empty Object
isEmpty([]); // Empty Array

2

chỉ cần đặt biến bên trong điều kiện if, nếu biến có bất kỳ giá trị nào thì nó sẽ trả về true, else false.

if (response.photo){ // if you are checking for string use this if(response.photo == "") condition
 alert("Has Value");
}
else
{
 alert("No Value");
};

Điều này giả định rằng 'trống rỗng' có nghĩa là không ... nhưng không rõ ràng từ câu hỏi của Người hỏi rằng đây là ý của họ. Có lẽ tốt hơn nên làm rõ điều đó trước, trước khi đưa ra câu trả lời, hoặc ít nhất là nêu nó như một giả định trong câu trả lời của bạn.
Mir


0

Nó phụ thuộc vào những gì bạn có nghĩa là "trống rỗng". Mẫu phổ biến nhất là kiểm tra xem biến có phải là không xác định hay không . Nhiều người cũng kiểm tra null, ví dụ:
if (myVariable === undefined || myVariable === null)...

hoặc ở dạng ngắn hơn:
if (myVariable || myVariable === null)...


Đừng sử dụng undefined"hằng số", vì nó không phải là hằng số. Sử dụng typeof myVar === 'undefined'thay thế.
Guffa

Hai hình thức này không giống nhau chút nào.
kapa

Đúng, có một loại không xác định, nhưng để trích dẫn tiêu chuẩn: Tham chiếu là một ràng buộc tên được phân giải. Tham chiếu bao gồm ba thành phần, giá trị cơ sở, tên được tham chiếu và cờ tham chiếu nghiêm ngặt có giá trị Boolean. Giá trị cơ sở là không xác định, một Đối tượng, một Boolean, một Chuỗi, một Số hoặc một bản ghi môi trường (10.2.1). Giá trị cơ sở của không xác định chỉ ra rằng tham chiếu không thể được phân giải thành một ràng buộc.
Bobby D

0
if (myVar == undefined)

sẽ hoạt động để xem liệu var có được khai báo nhưng không được phát sinh hay không.


1
Điều này là nguy hiểm vì undefinedcó thể được xác định lại trong mã (nghĩa undefined = truelà hợp lệ).
Tomalak

Đừng sử dụng undefined"hằng số", vì nó không phải là hằng số. Sử dụng typeof myVar === 'undefined'thay thế.
Guffa

0

Kiểm tra không xác định:

if (typeof response.photo == "undefined")
{
    // do something
}

Điều này sẽ làm tương đương với vb's IsEmpty. Nếu myvar chứa bất kỳ giá trị nào, kể cả null, chuỗi rỗng hoặc 0, thì nó không phải là "trống".

Để kiểm tra xem một biến hoặc thuộc tính có tồn tại hay không, ví dụ như nó đã được khai báo, mặc dù nó có thể chưa được định nghĩa, bạn có thể sử dụng intoán tử.

if ("photo" in response)
{
    // do something
}

0

Nếu bạn đang tìm kiếm emptychức năng tương đương của PHP , hãy xem phần này:

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


0

Tôi thiếu gì nếu mảng trống ... đối tượng không khóa ... falseness const isEmpty = o => Array.isArray (o) &&! o.join (''). length || typeof o === 'object' &&! Object.keys (o) .length || ! (+ giá trị);


0

Đây là một giải pháp đơn giản hơn (ngắn gọn) để kiểm tra các biến trống. Hàm này kiểm tra xem một biến có trống không. Biến được cung cấp có thể chứa các giá trị hỗn hợp (null, không xác định, mảng, đối tượng, chuỗi, số nguyên, hàm).

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

Kỳ lạ ... Tôi chưa thấy giải pháp này được đăng trực tuyến nhưng việc sử dụng "!" nên chăm sóc kiểm tra hầu hết các giá trị
J Carrillo

0

const isEmpty = val => val == null || !(Object.keys(val) || val).length;


Tôi không hiểu, người dùng hỏi cách kiểm tra trống trong javascript, vì vậy tôi cho rằng người dùng biết javascript, không cần giải thích câu trả lời của tôi nếu biết cú pháp?
ismael oliva.

Thêm một vài từ mô tả sẽ tốt hơn (: Có thể người khác cũng muốn hiểu.
RtmY

0

function isEmpty(variable) {
  const type = typeof variable
  if (variable === null) return true
  if (type === 'undefined') return true
  if (type === 'boolean') return false
  if (type === 'string') return !variable
  if (type === 'number') return false
  if (Array.isArray(variable)) return !variable.length
  if (type === 'object') return !Object.keys(variable).length
  return !variable
}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.