Làm cách nào để kiểm tra giá trị null trong JavaScript?


575

Làm cách nào để kiểm tra giá trị null trong JavaScript? Tôi đã viết mã dưới đây nhưng nó không hoạt động.

if (pass == null || cpass == null || email == null || cemail == null || user == null) {      

    alert("fill all columns");
    return false;  

}   

Và làm cách nào tôi có thể tìm thấy lỗi trong các chương trình JavaScript của mình?


Bạn có chắc chắn các giá trị bạn đang kiểm tra thực sự là null và không chỉ là chuỗi rỗng?
Jan-Peter Vos

72
thử nghiệm nulltrong js nên được thực hiện với nhà điều hành nghiêm ngặt===
davin

3
@davin - đúng, nhưng không phải là vấn đề ở đây vì nếu đó là tuyên bố vẫn sẽ hoạt động.
Mark Kahn

3
@cwolves, nếu tôi nghĩ đó là vấn đề thì tôi đã có thể đưa ra nhận xét đó. Kiểm tra từ ngữ của tôi, tôi rõ ràng đang đưa ra một tuyên bố chung về ngôn ngữ liên quan đến thực tiễn của OP và không đề xuất rằng điều này giải quyết vấn đề của anh ấy.
davin

2
@TRiG các thay đổi được đề xuất về cơ bản làm thay đổi bản chất của câu hỏi đến mức các câu trả lời (không chỉ của tôi) làm mất bối cảnh và không có ý nghĩa. Việc chỉnh sửa chỉ nên là một bình luận.
ic3b3rg

Câu trả lời:


742

Javascript rất linh hoạt liên quan đến việc kiểm tra các giá trị "null". Tôi đoán bạn đang thực sự tìm kiếm các chuỗi trống, trong trường hợp đó, mã đơn giản hơn này sẽ hoạt động:

if(!pass || !cpass || !email || !cemail || !user){

Mà sẽ kiểm tra chuỗi rỗng ( ""), null, undefined, falsevà những con số 0NaN

Xin lưu ý rằng nếu bạn đang kiểm tra cụ thể các số thì đó là một lỗi phổ biến khi bỏ 0qua phương thức này và num !== 0được ưu tiên ( num !== -1hoặc ~num(mã hacky cũng kiểm tra -1)) cho các hàm trả về -1, ví dụ indexOf)


4
Sẽ rất hữu ích khi biết phần nào của bài kiểm tra này cho giá trị nào. Đôi khi bạn đang tìm kiếm một đặc biệt.
inorganik

2
Một phần của một tuyên bố muộn, nhưng vâng, bạn có thể thực hiện kiểm tra đối với từng người @inorganik, xem câu trả lời của tôi dưới đây
WebWanderer

28
Bạn đọc, hãy cẩn thận khi sử dụng loại thử nghiệm này trên dữ liệu số. Không sử dụng !hoặc !!để kiểm tra nullhoặc undefinedtrên dữ liệu số thường trừ khi bạn cũng muốn loại bỏ các giá trị bằng 0.
NickS

4
Câu trả lời tự nói lên điều này: "... và những con số 0...". Tôi tin rằng câu trả lời này hoàn toàn phù hợp cho câu hỏi được đưa ra theo ngữ cảnh (mà tôi suy luận là "tên người dùng, mật khẩu, email"), họ không kiểm tra 0giá trị. Tuy nhiên, với sự phổ biến của câu hỏi và câu trả lời này, tôi đồng ý rằng nó đáng được đề cập trong chính câu trả lời.
Mark Kahn

4
@Hendeca - trợn mắt Đi đọc mã trong câu hỏi thực tế. Đó là hỏi rõ ràng về tên người dùng và mật khẩu. Tôi không đoán được gì, tôi chỉ là người lịch sự. Bạn đang bị làm phiền bởi thực tế là tôi đã trả lời những gì họ cần chứ không phải những gì họ yêu cầu, điều đó thật vô lý. Đây là SO, hầu hết thời gian mọi người không biết những gì họ nên yêu cầu. Trong bối cảnh của câu hỏi ban đầu, câu trả lời này là chính xác. Bây giờ ngừng thêm tiếng ồn.
Mark Kahn

419

Để kiểm tra null ĐẶC BIỆT, bạn sẽ sử dụng:

if (variable === null)

Thử nghiệm này sẽ chỉ vượt qua cho nullvà sẽ không vượt qua cho "", undefined, false, 0, hoặc NaN.

Ngoài ra, tôi đã cung cấp kiểm tra tuyệt đối cho từng giá trị "giống như sai" (một giá trị sẽ trả về đúng cho !variable).

Lưu ý, đối với một số kiểm tra tuyệt đối, bạn sẽ cần triển khai sử dụng absolutely equals: ===typeof.

Tôi đã tạo một JSFiddle ở đây để hiển thị tất cả các thử nghiệm riêng lẻ đang hoạt động

Đây là đầu ra của mỗi kiểm tra:

Null Test:

if (variable === null)

- variable = ""; (false) typeof variable = string

- variable = null; (true) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number



Empty String Test:

if (variable === '')

- variable = ''; (true) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number




Undefined Test:

if (typeof variable == "undefined")

-- or --

if (variable === undefined)

- variable = ''; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (true) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number



False Test:

if (variable === false)

- variable = ''; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (true) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number



Zero Test:

if (variable === 0)

- variable = ''; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (true) typeof variable = number

- variable = NaN; (false) typeof variable = number



NaN Test:

if (typeof variable == 'number' && !parseFloat(variable) && variable !== 0)

-- or --

if (isNaN(variable))

- variable = ''; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (true) typeof variable = number

Như bạn có thể thấy, khó kiểm tra hơn một chút NaN;


9
Mục đích của việc kiểm tra loại nếu bạn sử dụng ===bình đẳng nghiêm ngặt là gì? Cảm ơn. Ngoài ra đối với thử nghiệm NaN, bạn có thể sử dụng isNaN(value)sẽ truechỉ trả về nếu biến bằng NaN.
Michael Malinovskij

16
Có trường hợp nào variable === nullnhưng không thuộc loại "đối tượng"? Nếu không có, tại sao không đơn giản hóa việc kiểm tra variable === null, ném ra kết hợp thứ hai? Cảm ơn.
Hồ Nam Rostomyan

7
@HunanRostomyan Câu hỏi hay, và thành thật mà nói, không, tôi không nghĩ là có. Bạn rất có thể đủ an toàn khi sử dụng variable === nullmà tôi vừa thử nghiệm ở đây trong JSFiddle này . Lý do tôi cũng đã sử dụng `&& typeof biến === 'object'` không chỉ để minh họa một thực tế thú vị rằng một nullgiá trị là một kiểu chữ object, mà còn để theo dòng chảy của các kiểm tra khác. Nhưng có, kết luận, bạn an toàn để sử dụng đơn giản variable === null.
WebWanderer

1
jsfiddle.net/neoaptt/avt1cgem/1 Đây là câu trả lời được chia thành các hàm. Không hữu ích lắm, nhưng dù sao tôi cũng đã làm được.
Neoaptt

1
Tôi sẽ làm một việc gần như không bao giờ là một ý tưởng hay: thay đổi mã trong câu trả lời này. Cụ thể, loại bỏ kiểm tra hoàn toàn không cần thiết cho loại đối tượng, khi kiểm tra null. Đây là một đoạn mã cơ bản : không phải là một ý tưởng hay để ngay cả một người mới bắt đầu học sai rằng họ cần phải làm bài kiểm tra dài dòng đó.
ToolmakerSteve

59

chỉ cần thay thế ==bằng ===ở tất cả các nơi.

== là một so sánh bình đẳng lỏng lẻo hoặc trừu tượng

=== là một so sánh bình đẳng nghiêm ngặt

Xem bài viết MDN về so sánh Bình đẳng và giống nhau để biết thêm chi tiết.


2
Điều này chỉ hoạt động nếu bạn coi undefinedlà không null. Nếu không nó sẽ dẫn đến rất nhiều hành vi bất ngờ. Nói chung nếu bạn quan tâm đến cả hai null/ undefinednhưng không phải là giá trị giả, thì hãy sử dụng ==(một trong số ít trường hợp bạn nên làm như vậy).
Andrew Mao

2
@AndrewMao undefined không phải là null : stackoverflow.com/a/5076962/753237
ic3b3rg

2
Tôi tin rằng đó là những gì @AndrewMao đã nói, thực sự. Câu đầu tiên của ông có thể được viết lại "Điều này chỉ hoạt động trong các tình huống không xác định và null không tương đương thực tế."
BobRodes

1
@BobRodes Cảm ơn bạn đã làm rõ bài viết kém của mình, tôi đánh giá cao nó :)
Andrew Mao

@AndrewMao Bạn rất hoan nghênh. Và tôi sẽ không gọi văn bản của bạn nghèo, cá nhân; Tôi muốn nói rằng đó là một thỏa thuận tốt hơn so với trung bình. :)
BobRodes

30

Toán tử bình đẳng nghiêm ngặt: -

Chúng tôi có thể kiểm tra null bằng cách ===

if ( value === null ){

}

Chỉ bằng cách sử dụng if

if( value ) {

}

sẽ đánh giá là đúng nếu giá trị không :

  • vô giá trị
  • chưa xác định
  • NaN
  • chuỗi rỗng ("")
  • sai
  • 0

9

Cải thiện câu trả lời được chấp nhận bằng cách kiểm tra rõ ràng nullnhưng với cú pháp đơn giản hóa:

if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
    // your code here ...
}

// Test
let pass=1, cpass=1, email=1, cemail=1, user=1; // just to test

if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
    // your code here ...
    console.log ("Yayy! None of them are null");
} else {
    console.log ("Oops! At-lease one of them is null");
}


6

Đầu tiên, bạn có một câu lệnh return mà không có phần thân hàm. Rất có thể sẽ ném một lỗi.

Một cách sạch hơn để kiểm tra của bạn sẽ chỉ đơn giản là sử dụng! nhà điều hành:

if (!pass || !cpass || !email || !cemail || !user) {

    alert("fill all columns");

}

12
Mã đó có thể nằm trong một chức năng, anh ta đã không hiển thị nó;)
Mark Kahn

4

bạn có thể sử dụng thử bắt cuối cùng

 try {
     document.getElementById("mydiv").innerHTML = 'Success' //assuming "mydiv" is undefined
 } catch (e) {

     if (e.name.toString() == "TypeError") //evals to true in this case
     //do something

 } finally {}   

bạn cũng có thể throwlỗi của riêng bạn. Xem này .


1
tôi nghĩ rằng điều này đủ điều kiện là mã 'hoang tưởng'. nếu bạn thực sự đã viết một cái gì đó như thế này, thì đó sẽ là một sự hiểu biết rằng "mydiv" không thể tồn tại. chúng tôi không nên tiếp cận mã này trừ khi chúng tôi tin rằng đó là trường hợp và chúng tôi có rất nhiều con đường như mã phản hồi để đảm bảo rằng chúng tôi tự tin trước khi thử một dòng như vậy.
calql8edkos

Không sử dụng thử và bắt cho dòng kiểm soát. Đây không phải là một giải pháp tốt.
Andrew S

4

Trong JavaScript, không có chuỗi nào bằng null.

Có thể bạn dự đoán pass == nulllà đúng khi passlà một chuỗi rỗng bởi vì bạn biết rằng toán tử đẳng thức lỏng lẻo ==thực hiện một số loại cưỡng chế nhất định.

Ví dụ: biểu thức này là đúng:

'' == 0

Ngược lại, toán tử bình đẳng nghiêm ngặt ===nói rằng điều này là sai:

'' === 0

Cho rằng ''0bằng nhau một cách lỏng lẻo, bạn có thể phỏng đoán một cách hợp lý rằng ''nullbằng nhau một cách lỏng lẻo. Tuy nhiên, họ thì không.

Biểu thức này là sai:

'' == null

Kết quả của việc so sánh bất kỳ chuỗi nào nulllà sai. Do đó, pass == nullvà tất cả các thử nghiệm khác của bạn luôn sai và người dùng không bao giờ nhận được cảnh báo.

Để sửa mã của bạn, hãy so sánh từng giá trị với chuỗi trống:

pass === ''

Nếu bạn chắc chắn đó passlà một chuỗi, pass == ''cũng sẽ hoạt động vì chỉ một chuỗi trống là lỏng lẻo bằng chuỗi trống. Mặt khác, một số chuyên gia nói rằng đó là một cách thực hành tốt để luôn sử dụng sự bình đẳng nghiêm ngặt trong JavaScript trừ khi bạn đặc biệt muốn thực hiện kiểu ép buộc mà toán tử đẳng thức lỏng lẻo thực hiện.

Nếu bạn muốn biết các cặp giá trị nào bằng nhau, hãy xem bảng "So sánh tương tự" trong bài viết của Mozilla về chủ đề này .


4

để kiểm tra không xác địnhnull trong javascript, bạn chỉ cần viết như sau:

if (!var) {
        console.log("var IS null or undefined");
} else {
        console.log("var is NOT null or undefined");
}

6
! var cũng đúng với 0, "", NaN và false.
Matt

3

Đây là nhận xét về giải pháp của WebWander về việc kiểm tra NaN (Tôi chưa có đủ đại diện để nhận xét chính thức). Giải pháp đọc là

if(!parseInt(variable) && variable != 0 && typeof variable === "number")

nhưng điều này sẽ thất bại đối với các số hữu tỷ sẽ làm tròn 0, chẳng hạn như variable = 0.1. Một bài kiểm tra tốt hơn sẽ là:

if(isNaN(variable) && typeof variable === "number")

1
Cảm ơn bạn đã chỉ ra lỗi Gabriel, tôi đã khắc phục câu trả lời của mình. Ngoài ra, tôi đã có thể sửa bài kiểm tra bằng cách thay đổi parseIntthành parseFloat (điều đáng lẽ phải rõ ràng với tôi ngay từ đầu). Tôi tránh sử dụng isNanhàm vì tôi cảm thấy như thể nhiều nhà phát triển xem các hàm isNaNnhư một loại "hộp ma thuật" nào đó mà các giá trị đi vào và các booleans ra đời, và tôi muốn kiểm tra sâu hơn một chút. Nhưng có, thử nghiệm đề xuất của bạn sẽ hoạt động và hoàn toàn tốt để sử dụng. Xin lỗi tôi đã không nhận thấy bài viết của bạn cho đến bây giờ.
WebWanderer

1
Tuyệt vời, điều đó dường như làm việc. Cảm ơn vì nhận xét về lý do tại sao bạn cũng tránh isNaN, tôi có thể nhận được đằng sau logic đó. Ngoài ra còn có phương thức Underscore.js, có vẻ khó hiểu hơn / hộp đen, nhưng dù sao cũng đáng chú ý vì nó tận dụng lợi thế của nó NaN !== NaN. Object.prototype.toString.call(variable) === '[object Number]' && variable !== +variable
Gabriel

2

Trên thực tế tôi nghĩ rằng bạn có thể cần phải sử dụng if (value !== null || value !== undefined) bởi vì nếu bạn sử dụng, if (value)bạn cũng có thể lọc các giá trị 0 hoặc sai.

Hãy xem xét hai chức năng này:

const firstTest = value => {
    if (value) {
        console.log('passed');
    } else {
        console.log('failed');
    }
}
const secondTest = value => {
    if (value !== null && value !== undefined) {
        console.log('passed');
    } else {
        console.log('failed');
    }
}

firstTest(0);            // result: failed
secondTest(0);           // result: passed

firstTest(false);        // result: failed
secondTest(false);       // result: passed

firstTest('');           // result: failed
secondTest('');          // result: passed

firstTest(null);         // result: failed
secondTest(null);        // result: failed

firstTest(undefined);    // result: failed
secondTest(undefined);   // result: failed

Trong tình huống của tôi, tôi chỉ cần kiểm tra xem giá trị là null và không xác định và tôi không muốn lọc 0hoặc falsehoặc ''giá trị. Vì vậy, tôi đã sử dụng thử nghiệm thứ hai, nhưng bạn cũng có thể cần phải lọc chúng, điều này có thể khiến bạn sử dụng thử nghiệm đầu tiên.


1

Tôi tìm thấy một cách khác để kiểm tra nếu giá trị là null:

if(variable >= 0 && typeof variable === "object")

nullhoạt động như một numberobjectcùng một lúc. So sánh null >= 0hoặc null <= 0kết quả trong true. So sánh null === 0hoặc null > 0hoặc null < 0sẽ cho kết quả sai. Nhưng nullcũng là một đối tượng chúng ta có thể phát hiện ra nó là một null.

Tôi đã thực hiện một chức năng phức tạp hơn natureof phù thủy sẽ làm tốt hơn so với typeof và có thể nói với những loại bao gồm hoặc tiếp tục nhóm

/* function natureof(variable, [included types])
included types are 
    null - null will result in "undefined" or if included, will result in "null"
    NaN - NaN will result in "undefined" or if included, will result in "NaN"
    -infinity - will separate negative -Inifity from "Infinity"
    number - will split number into "int" or "double"
    array - will separate "array" from "object"
    empty - empty "string" will result in "empty" or
    empty=undefined - empty "string" will result in "undefined"
*/
function natureof(v, ...types){
/*null*/            if(v === null) return types.includes('null') ? "null" : "undefined";
/*NaN*/             if(typeof v == "number") return (isNaN(v)) ? types.includes('NaN') ? "NaN" : "undefined" : 
/*-infinity*/       (v+1 === v) ? (types.includes('-infinity') && v === Number.NEGATIVE_INFINITY) ? "-infinity" : "infinity" : 
/*number*/          (types.includes('number')) ? (Number.isInteger(v)) ? "int" : "double" : "number";
/*array*/           if(typeof v == "object") return (types.includes('array') && Array.isArray(v)) ? "array" : "object";
/*empty*/           if(typeof v == "string") return (v == "") ? types.includes('empty') ? "empty" : 
/*empty=undefined*/ types.includes('empty=undefined') ? "undefined" : "string" : "string";
                    else return typeof v
}

// DEMO
let types = [null, "", "string", undefined, NaN, Infinity, -Infinity, false, "false", true, "true", 0, 1, -1, 0.1, "test", {var:1}, [1,2], {0: 1, 1: 2, length: 2}]

for(i in types){
console.log("natureof ", types[i], " = ", natureof(types[i], "null", "NaN", "-infinity", "number", "array", "empty=undefined")) 
}


1

Tôi đã thực hiện chức năng rất đơn giản này làm việc kỳ diệu:

function safeOrZero(route) {
  try {
    Function(`return (${route})`)();
  } catch (error) {
    return 0;
  }
  return Function(`return (${route})`)();
}

Tuyến đường là bất cứ chuỗi giá trị nào có thể nổ tung. Tôi sử dụng nó cho jQuery / cổ vũ và các đối tượng và như vậy.

Ví dụ 1: một đối tượng đơn giản như thế này const testObj = {items: [{ val: 'haya' }, { val: null }, { val: 'hum!' }];};.

Nhưng nó có thể là một vật thể rất lớn mà chúng ta thậm chí không tạo ra. Vì vậy, tôi vượt qua nó:

let value1 = testobj.items[2].val;  // "hum!"
let value2 = testobj.items[3].val;  // Uncaught TypeError: Cannot read property 'val' of undefined

let svalue1 = safeOrZero(`testobj.items[2].val`)  // "hum!"
let svalue2 = safeOrZero(`testobj.items[3].val`)  // 0

Tất nhiên nếu bạn thích bạn có thể sử dụng nullhoặc 'No value'... Bất cứ điều gì phù hợp với nhu cầu của bạn.

Thông thường, một truy vấn DOM hoặc bộ chọn jQuery có thể gây ra lỗi nếu không tìm thấy. Nhưng sử dụng một cái gì đó như:

const bookLink = safeOrZero($('span.guidebook > a')[0].href);
if(bookLink){
  [...]
}

1

Bạn có thể sử dụng mô-đun lodash để kiểm tra giá trị là null hoặc không xác định

_.isNil(value)
Example 

 country= "Abc"
    _.isNil(country)
    //false

   state= null
    _.isNil(state)
    //true

city= undefined
    _.isNil(state)
    //true

   pin= true
    _.isNil(pin)
    // false   

Liên kết tham khảo: https://lodash.com/docs/#isNil


0

Điều này sẽ không hoạt động trong trường hợp các giá trị Boolean đến từ DB cho ví dụ:

 value = false

 if(!value) {
   // it will change all false values to not available
   return "not available"
 }

0

AFAIK trong JAVASCRIPT khi một biến được khai báo nhưng chưa được gán giá trị, loại của nó là undefined. vì vậy chúng tôi có thể kiểm tra biến ngay cả khi nó sẽ là một objecttổ chức một số ví dụ ở vị trí của giá trị .

tạo một phương thức trợ giúp để kiểm tra tính vô hiệu trả về truevà sử dụng nó trong API của bạn.

Hàm trợ giúp để kiểm tra xem biến có trống không:

function isEmpty(item){
    if(item){
        return false;
    }else{
        return true;
    }
}

thử bắt cuộc gọi API đặc biệt:

try {

    var pass, cpass, email, cemail, user; // only declared but contains nothing.

    // parametrs checking
    if(isEmpty(pass) || isEmpty(cpass) || isEmpty(email) || isEmpty(cemail) || isEmpty(user)){
        console.log("One or More of these parameter contains no vlaue. [pass] and-or [cpass] and-or [email] and-or [cemail] and-or [user]");
    }else{
        // do stuff
    }

} catch (e) {
    if (e instanceof ReferenceError) {
        console.log(e.message); // debugging purpose
        return true;
    } else {
        console.log(e.message); // debugging purpose
        return true;
    }
}

một số trường hợp thử nghiệm:

var item = ""; // isEmpty? true
var item = " "; // isEmpty? false
var item; // isEmpty? true
var item = 0; // isEmpty? true
var item = 1; // isEmpty? false
var item = "AAAAA"; // isEmpty? false
var item = NaN; // isEmpty? true
var item = null; // isEmpty? true
var item = undefined; // isEmpty? true

console.log("isEmpty? "+isEmpty(item));

1
Gì? Câu trả lời này không có gì để làm với bài này. Bạn đã đăng câu trả lời này trên chủ đề này một cách tình cờ?
WebWanderer

isEmptyHàm này hoạt động chính xác như thế nào !. Không cần phải phát minh ra một chức năng. Cứ làm đi if (!pass || !cpass || !email ...). (Điều này đã được hiển thị trong câu trả lời được chấp nhận.) Và theo nhận xét của WebWander, phần giữa của bài đăng này, "cuộc gọi API đặc biệt thử bắt", dường như không liên quan đến câu hỏi này. Hãy giải thích ý định của bạn - khi nào thì hữu ích? Làm thế nào mà liên quan đến câu hỏi?
ToolmakerSteve

0

Kiểm tra điều kiện lỗi:

// Typical API response data
let data = {
  status: true,
  user: [],
  total: 0,
  activity: {sports: 1}
}

// A flag that checks whether all conditions were met or not
var passed = true;

// Boolean check
if (data['status'] === undefined || data['status'] == false){
  console.log("Undefined / no `status` data");
  passed = false;
}

// Array/dict check
if (data['user'] === undefined || !data['user'].length){
  console.log("Undefined / no `user` data");
  passed = false;
}

// Checking a key in a dictionary
if (data['activity'] === undefined || data['activity']['time'] === undefined){
   console.log("Undefined / no `time` data");
   passed = false;
}

// Other values check
if (data['total'] === undefined || !data['total']){
  console.log("Undefined / no `total` data");
  passed = false;
}

// Passed all tests?
if (passed){
  console.log("Passed all tests");
}

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.