2017-10-06 22 views
44

Tôi chỉ có thêm một câu hỏi tầm thường.undefined == undefined là đúng. Nhưng undefined> = undefined là sai?

Tại sao undefined == undefined trả lại true, nhưng undefined >= undefinedfalse?

undefined bằng undefined.

Nhưng không bằng hoặc lớn hơn?

+11

Đoán của tôi là cả hai 'undefined' đều bị ép buộc thành 'NaN' không bằng với chính nó. – Xufox

+1

'undefined === undefined || undefined> undefined' và 'undefined> = undefined', OR trong" lớn hơn hoặc bằng "không giống với OR' || ' –

+0

@DeepakKamat điều gì xảy ra sau hậu trường'> = '? Tôi nghĩ rằng đó là những gì câu hỏi này là nhận được tại – theonlygusti

Trả lời

2

Các toán tử bất bình đẳng (<, >, v.v) không thể được sử dụng để so sánh các giá trị không được chuyển đổi hoàn toàn thành số. Điều này bao gồm undefined. Lý do đằng sau những gì bạn thấy là, không giống như các ngôn ngữ khác mà ném một lỗi nếu bạn cố gắng làm một cái gì đó như thế này anyway (tức là TypeError trong python), JS cho phép bạn làm điều đó. Tuy nhiên, kết quả sẽ luôn là sai.

+0

Điều này không giải thích tại sao '" foo "> =" bar "' là 'true' và không bao gồm giải thích cách nhà khai thác ép buộc toán hạng của họ thành một loại đối sánh. – Xufox

+1

@Xufox vì JavaScript là ngôn ngữ được đánh máy sai. Nó có thể chuyển đổi chuỗi có số trong chuỗi và so sánh và đó cũng là một toán tử "===" để so sánh nghiêm ngặt thay vì chuỗi chuyển đổi đơn giản thành số nguyên và phao. –

+8

Trên thực tế, khi sử dụng sự bất bình đẳng, chuỗi được so sánh [theo từ điển] (https://stackoverflow.com/a/7087831/7662085). – stybl

46

>= operator về cơ bản là phủ định của < operator. Và cả hai gọi số Abstract Relational Comparison Algorithm trả về không xác định cho undefined >= undefined như được xác định trong bước 3 (a đến c). Trên thực tế, bạn cũng có thể thấy rằng các toán tử lớn hơn (-or-bằng) và nhỏ hơn (-hoàn đẳng) chỉ hoạt động với một trong hai số hoặc chuỗi.

Sau đó, trong 6. bước của đặc điểm kỹ thuật của các nhà điều hành >=, bạn có thể thấy tại sao nó trả sai:

Nếu rđúng hoặc không xác định, trở sai. Nếu không, hãy trả lại đúng.

8

undefined === undefined || undefined > undefinedundefined >= undefined, OR trong "lớn hơn hoặc bằng" không giống như thế này HOẶC ||.

Khi có liên quan, các toán tử so sánh như >, <, >= v.v ... có nghĩa là đối với các số và undefined không phải là số, undefined không được xác định.

Bạn mong đợi điều gì khi giá trị trả lại là 10 >= "Hello World"? Tất nhiên là sai, nhưng lại một lần nữa 10 >= "10" trả về true10 == "10" là đúng và 10 === "10" là sai. "10" có thể được chuyển đổi thành một số để chúng tôi thấy kết quả có thể được trả lại trong trường hợp số thực và không phải là chuỗi có số.

Không có phiên bản điều hành bình đẳng nghiêm ngặt cho >= như trái ngược với != đó là !==

Một số điều thực sự kỳ lạ và khó hiểu xảy ra khi bạn cố gắng so sánh null, undefined, NaN - Đây là điều mà các đặc điểm kỹ thuật của JavaScript có thể có thể trả lời và vì JavaScript là một ngôn ngữ rất lỏng lẻo và các loại rất linh hoạt, đó là lý do tại sao người ta có thể so sánh 10"10" và vẫn nhận được kết quả mà bạn có thể chỉ nhận được khi so sánh hai số nguyên trong hầu hết các ngôn ngữ khác.

Các câu hỏi và thảo luận được chào đón nhiều hơn so với bỏ phiếu trực tiếp. Cảm ơn.

Các vấn đề liên quan