Câu hỏi Làm thế nào để bạn kiểm tra một chuỗi rỗng trong JavaScript?


Tôi đã thấy nó sợi chỉ, nhưng tôi không thấy một ví dụ cụ thể về JavaScript. Có đơn giản không string.Empty có sẵn trong JavaScript hoặc chỉ là trường hợp kiểm tra ""?


2147
2017-09-30 17:17


gốc


chỉ FYI, tôi nghĩ rằng các API hữu ích nhất cho lớp String là Mozilla và bộ javascript. [elated.com] (elated.com/articles/working-with-strings ) có hướng dẫn về tất cả các thuộc tính, phương thức của String, ... Xin lưu ý: liên kết Mozilla đã được cập nhật lên developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… - Gene T


Các câu trả lời:


Nếu bạn chỉ muốn kiểm tra xem có giá trị nào không, bạn có thể làm

if (strValue) {
    //do something
}

Nếu bạn cần kiểm tra cụ thể cho một chuỗi rỗng trên null, tôi sẽ nghĩ rằng việc kiểm tra "" là đặt cược tốt nhất của bạn, sử dụng các === nhà điều hành (để bạn biết rằng trên thực tế, một chuỗi bạn đang so sánh).

if (strValue === "") {
    //...
}

2743
2017-09-30 17:20



Kiểm tra thuộc tính chiều dài có thể thực sự nhanh hơn kiểm tra chuỗi đối với "", bởi vì trình thông dịch sẽ không phải tạo một đối tượng String từ chuỗi ký tự. - Vincent Robert
@Vincent thực hiện một số tiểu sử ngây thơ trong các công cụ dành cho nhà phát triển Chrome, thử nghiệm === '' so với .length không hiển thị bất kỳ cải tiến rõ rệt nào (và sử dụng .length chỉ hoạt động nếu bạn có thể giả định rằng bạn có một chuỗi) - bdukes
@bdukes khi bạn bắt đầu quan tâm đến loại tối ưu hóa vi mô đó, tôi không nghĩ Chrome là trình duyệt mà bạn đang gặp phải hầu hết các sự cố về hiệu suất của mình ... - Vincent Robert
Chỉ cần lưu ý, nếu định nghĩa của bạn về "chuỗi rỗng" bao gồm khoảng trắng, thì giải pháp này không phù hợp. Một chuỗi gồm 1 hoặc nhiều dấu cách trả về đúng ở trên. Nếu bạn đang sử dụng JQuery, bạn có thể sử dụng đơn giản: if ($ .trim (ref) .length === 0) - theo câu trả lời này cho một câu hỏi tương tự: stackoverflow.com/questions/2031085/… - CodeClimber
Như mong đợi .length > 0 thực sự là nhanh hơn nhiều so với so sánh với chuỗi chữ! Kiểm tra này jsPerf - Chad


Để kiểm tra xem một chuỗi có rỗng hay không, tôi không sử dụng:

function isEmpty(str) {
    return (!str || 0 === str.length);
}

Để kiểm tra xem một chuỗi có trống, không hoặc không xác định, tôi sử dụng:

function isBlank(str) {
    return (!str || /^\s*$/.test(str));
}

Để kiểm tra xem chuỗi có trống hay chỉ chứa khoảng trắng:

String.prototype.isEmpty = function() {
    return (this.length === 0 || !this.trim());
};

903
2017-07-16 01:45



tại sao 0 === str.length thay vì str.length === 0? - Vincent
@Vincent Điều kiện thường được viết như thế này if (variable == constant value) và nếu bạn quên '=' thì bạn chỉ định giá trị hằng số cho biến thay vì thử nghiệm. Mã sẽ vẫn hoạt động khi bạn có thể gán biến trong if. Vì vậy, cách an toàn hơn để viết điều kiện này là đảo ngược giá trị không đổi và biến. Bằng cách này khi bạn kiểm tra mã của bạn, bạn sẽ thấy một lỗi (không hợp lệ bên tay trái trong phân công). Bạn cũng có thể sử dụng một cái gì đó như JSHint để không cho phép chuyển nhượng trong điều kiện và được cảnh báo khi bạn viết một. - florian
Xấu hổ /^\s*$/.test(str) không thực sự dễ đọc - có thể xóa không gian bằng cách sử dụng mã đơn giản hơn hoặc regex sẽ tốt hơn? xem stackoverflow.com/questions/6623231/… và cũng stackoverflow.com/questions/10800355/… - Adrien Be
/^\s*$/.test(str) có thể được thay thế bằng str.trim (). length === 0 - Schadenfreude
@Vincent này còn được gọi là "Điều kiện Yoda", như if blue is the sky. Xem dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html - AZ.


Tất cả những điều trên đều tốt nhưng điều này sẽ còn tốt hơn nữa. sử dụng !!(không không) nhà điều hành.

if(!!str){
some code here;
}

hoặc sử dụng tính năng nhập kiểu:

if(Boolean(str)){
    codes here;
}

Cả hai đều thực hiện cùng một chức năng, hãy nhập biến vào boolean, trong đó str là một biến.
Trả lại false cho null,undefined,0,000,"",false.
Trả lại true cho chuỗi "0" và khoảng trắng "".


225
2018-03-30 13:34



Tại sao điều này "thậm chí tốt hơn"? - Mene
Có sự khác biệt nào giữa hành vi của if(str) và if(!!str)? - Peter Olson
@ PeterOlson nếu bạn đang cố gắng lưu một biến như một boolean kiểm tra nhiều chuỗi cho nội dung thì bạn sẽ muốn làm điều này .. aka var any = (!!str1 && !!str2 && !!str3) xử lý nếu có một số trong đó là tốt - John Ruddell
Đây là giải pháp tôi luôn sử dụng. !!str.trim() để đảm bảo chuỗi không chỉ được tạo bằng khoảng trắng. - Dario Oddenino
Không giống như hack, Boolean(str) có thể đọc được nhiều hơn và ít "wtfish" hơn. - shinzou


Nếu bạn cần phải chắc chắn rằng chuỗi không chỉ là một bó của không gian trống (tôi giả định đây là để xác nhận mẫu), bạn cần phải làm một thay thế trên không gian.

if(str.replace(/\s/g,"") == ""){
}

88
2017-09-30 23:08



Nhưng thực hiện công việc nếu những gì bạn thực sự muốn thử nghiệm là một chuỗi với nội dung không gian. Có cách nào rẻ hơn để kiểm tra điều này không? - flash
Làm thế nào về tài sản dài? - driAn
Thay vì xóa tất cả các không gian, tại sao không chỉ kiểm tra xem có không gian không? Có 2 ưu điểm mà nó có thể bảo lãnh sớm nếu có một ký tự không dấu cách, và nó không trả về một chuỗi mới mà bạn kiểm tra lại. if(str.match(/\S/g)){} - mpen
@Mark FYI, bạn sẽ không cần công cụ sửa đổi toàn cục, vì kết quả trùng khớp của lần xuất hiện đầu tiên của một ký tự không dấu cách có nghĩa là chuỗi không rỗng: str.match(/\S/) - neezer
Quan trọng: Điều này sẽ ném lỗi, nếu str Là null. - nfechner


Điều gần nhất bạn có thể nhận được để str.Empty (với điều kiện tiên quyết str là một String) là:

if (!str.length) { ...

75
2017-09-30 19:17





Tôi sử dụng :

function empty(e) {
  switch (e) {
    case "":
    case 0:
    case "0":
    case null:
    case false:
    case typeof this == "undefined":
      return true;
    default:
      return false;
  }
}

empty(null) // true
empty(0) // true
empty(7) // false
empty("") // true
empty((function() {
    return ""
  })) // false

44
2017-07-09 18:52



Giải pháp này là ngôn ngữ bất khả tri hơn. Tính năng JavaScript duy nhất mà nó dựa vào là typeof. Vì vậy, nó là một ví dụ tốt về một giải pháp mà bạn có thể sử dụng khi bạn không tin tưởng vào việc triển khai trong các trình duyệt khác nhau và không có thời gian để lấy một giải pháp tốt hơn. (IE, không có truy cập internet). Nó giống như một bằng chứng. Không phải là sạch nhất nhưng bạn có thể chắc chắn nó sẽ làm việc mà không biết quá nhiều về JavaScript. - Jeff Davis
Tôi muốn đi xa hơn một chút, và đinh nó bằng toán tử === cho trường hợp không xác định. Nếu không nó chỉ đơn giản là câu trả lời hoàn hảo. - Carlos Alberto Martínez Gadea
Các typeof bên trong switch không làm việc cho tôi. Tôi đã thêm một if (typeof e == "undefined") kiểm tra và hoạt động. Tại sao? - Lucas


var s; // undefined
var s = ""; // ""
s.length // 0

Không có gì đại diện cho một chuỗi rỗng trong JavaScript. Thực hiện kiểm tra length (nếu bạn biết rằng var sẽ luôn là một chuỗi) hoặc ngược lại ""


23
2017-09-30 17:42





Thử:

if (str && str.trim().length) {  
    //...
}

22
2018-01-09 02:54



Tài sản dài có cần thiết không? - frogcoder


Tôi sẽ không lo lắng quá nhiều về hiệu quả phương pháp. Sử dụng những gì rõ ràng nhất với ý định của bạn. Đối với tôi thường là strVar == "".

EDIT: mỗi nhận xét từ Constantin, nếu strVar có thể làm thế nào kết thúc có chứa một số nguyên 0 giá trị, sau đó đó thực sự sẽ là một trong những tình huống có ý định làm rõ.


21
2017-09-30 17:20



Ý tưởng tồi. Bạn sẽ nhận được true nếu strVar vô tình được gán 0. - Constantin
Tôi đồng ý rằng làm cho ý định của bạn rõ ràng là quan trọng hơn bất kỳ vi tối ưu hóa nào các phương pháp khác có thể mang lại, nhưng bằng cách sử dụng toán tử so sánh nghiêm ngặt  === sẽ tốt hơn. Nó chỉ trả về đúng nếu strVar là một chuỗi rỗng. - Useless Code
Việc kiểm tra thất bại nếu không xác định. Vì vậy, nếu (str) hoạt động tốt hơn - Valentin Heinitz
@ValentinHeinitz nếu str được gán giá trị falsey là 0 hoặc "0", nếu (str) sẽ báo cáo sai sự thật. Cách tiếp cận tốt nhất là nếu (str === ""). Nó đơn giản và nó sẽ không bao giờ thất bại. - Scott Marcus
Mà bằng toán tử (== vs ===) nên được sử dụng trong so sánh JavaScript? - nobar


Chức năng:

function Is_Empty_or_Undefined (MyVar){      return (

        (typeof MyVar== 'undefined')
                    ||
        (MyVar == null) 
                    ||
        (MyVar == false)  //!MyVariable
                    ||
        (MyVar.length == 0)
                    ||
        (MyVar == "")
                    ||
        (MyVar.replace(/\s/g,"") == "")
                    ||
        (!/[^\s]/.test(MyVar))
                    ||
        (/^\s*$/.test(MyVar))
  );
}

19
2018-02-27 20:31



Bất kỳ cơ hội nào bạn có thể giải thích những gì từng kiểm tra đang làm? :) - DanV
-1 Họ đang thử nghiệm những thứ khác nhau. Nó không có ý nghĩa để đưa tất cả vào một if tuyên bố. - Bennett McElwee
@Bennett khá chắc chắn anh ấy chỉ làm việc đó để thể hiện những cách khác nhau ... - Robert Pounder
typeof MyVariable == 'undefined' không phân biệt giữa biến được khởi tạo với giá trị không xác định và biến chưa khai báo trừ khi biến ban đầu được khai báo và được khởi tạo thành null. Kiểm tra thuộc tính length làm cho chuỗi nguyên thủy được bọc trong một đối tượng chuỗi. - Scott Marcus