Cách dễ nhất để kiểm tra xem chuỗi là rỗng hay rỗng


87

Tôi có mã này để kiểm tra chuỗi trống hoặc rỗng. Nó đang hoạt động trong thử nghiệm.

eitherStringEmpty= (email, password) ->
  emailEmpty = not email? or email is ''
  passwordEmpty = not password? or password is ''
  eitherEmpty = emailEmpty || passwordEmpty         

test1 = eitherStringEmpty "A", "B" # expect false
test2 = eitherStringEmpty "", "b" # expect true
test3 = eitherStringEmpty "", "" # expect true
alert "test1: #{test1} test2: #{test2} test3: #{test3}"

Điều tôi tự hỏi là nếu có cách nào tốt hơn not email? or email is ''. Tôi có thể thực hiện tương đương với C # string.IsNullOrEmpty(arg)trong CoffeeScript chỉ với một lệnh gọi không? Tôi luôn có thể xác định một hàm cho nó (giống như tôi đã làm) nhưng tôi đang tự hỏi liệu có điều gì đó trong ngôn ngữ mà tôi đang thiếu.

Câu trả lời:


118

Đúng:

passwordNotEmpty = not not password

hoặc ngắn hơn:

passwordNotEmpty = !!password

1
Đây là "javascript-y" nhiều hơn trong hai câu trả lời. Đặc biệt nếu bạn sử dụng !!phiên bản, đây là một cách phổ biến để truyền về cơ bản thành boolean. Nếu nó quan trọng, điều này gần như chắc chắn nhanh hơn việc xác định một chức năng như Jeremy đã đề xuất.
Aaron Dufour

Tất cả chúng đều hoạt động, nhưng cái này nhận được nhiều ủng hộ nhất. Tôi thích stackoverflow.com/q/8127920/30946 để dễ đọc tho.
jcollum

3
Nó không cho chuỗi với tất cả không gian ... do đó, không làm việc cho trống
Arkhitech

1
@Arkhitech trống không giống như trống, vì vậy nó hoạt động.
jcollum

2
Quá "thông minh" cho sở thích của tôi về khả năng đọc; không nghĩ rằng tôi sẽ sử dụng nó, nhưng tốt công việc dù
PandaWood

37

Nó không hoàn toàn tương đương, nhưng email?.lengthsẽ chỉ đúng nếu khác emailrỗng và có thuộc tính khác 0 .length. Nếu bạn notgiá trị này, kết quả sẽ hoạt động như bạn muốn cho cả chuỗi và mảng.

Nếu emailnullhoặc không có .length, thì email?.lengthsẽ đánh giá nulllà sai. Nếu nó có một .lengththì giá trị này sẽ đánh giá theo chiều dài của nó, sẽ là false nếu nó trống.

Chức năng của bạn có thể được thực hiện như:

eitherStringEmpty = (email, password) ->
  not (email?.length and password?.length)

1
@pyrotechnick Câu hỏi không hỏi về việc phân biệt Mảng với Chuỗi. Nó hỏi về việc phân biệt giá trị null và chuỗi rỗng với chuỗi không rỗng. Quan điểm của tôi là mã cũng có thể phân biệt các giá trị rỗng và mảng trống với các mảng không trống, nhưng điều đó nằm ngoài phạm vi của câu hỏi.
Jeremy

Tuy nhiên, "hoặcStringEmpty" là tên không chính xác cho phương thức bạn đã cung cấp.
pyrotechnick

14

Đây là một trường hợp mà "tính tin cậy" có ích. Bạn thậm chí không cần phải xác định một hàm cho điều đó:

test1 = not (email and password)

Tại sao nó hoạt động?

'0'       // true
'123abc'  // true
''        // false
null      // false
undefined // false

1
Tôi giả sử bạn đã gọi .trim()giá trị này như một phần của logic xác thực của bạn. Câu trả lời là nhiều hơn về cú pháp CS.
Ricardo Tomasi,

5
unless email? and email
  console.log 'email is undefined, null or ""'

Trước tiên, hãy kiểm tra xem email không phải là không xác định và không rỗng bằng toán tử tồn tại, sau đó nếu bạn biết nó tồn tại, and emailphần này sẽ chỉ trả về false nếu chuỗi email trống.



1

Nếu bạn cần kiểm tra xem nội dung có phải là một chuỗi, không phải null và không phải là một mảng hay không, hãy sử dụng một phép so sánh kiểu đơn giản:

 if typeof email isnt "string"

typeof email isnt "string"false trả cho cả hai '''a'
jcollum

1

Đây là một jsfiddle thể hiện một cách rất dễ dàng để thực hiện việc này.

Về cơ bản, bạn chỉ cần làm điều này là javascript:

var email="oranste";
var password="i";

if(!(email && password)){
    alert("One or both not set");        
}
else{
    alert("Both set");   
}

Trong coffescript:

email = "oranste"
password = "i"
unless email and password
  alert "One or both not set"
else
  alert "Both set"

Hy vọng điều này sẽ giúp ai đó :)


1

Tôi nghĩ dấu chấm hỏi là cách dễ nhất để gọi một hàm trên một thứ nếu thứ đó tồn tại.

ví dụ

car = {
  tires: 4,
  color: 'blue' 
}

bạn muốn có được màu sắc, nhưng chỉ khi chiếc xe tồn tại ...

coffeescript:

 car?.color

dịch sang javascript:

if (car != null) {
  car.color;
}

nó được gọi là toán tử hiện sinh http://coffeescript.org/documentation/docs/grammar.html#section-63


Chuỗi rỗng trả về true để kiểm tra sự tồn tại.
jcollum

1

Tôi khá chắc chắn rằng câu trả lời của @thejh đủ tốt để kiểm tra chuỗi trống NHƯNG, tôi nghĩ chúng ta cần thường xuyên kiểm tra xem 'Nó có tồn tại không?' và sau đó chúng ta cần kiểm tra 'Có trống không? bao gồm chuỗi, mảng và đối tượng '

Đây là cách rút ngắn để CoffeeScript thực hiện điều này.

tmp? and !!tmp and !!Object.keys(tmp).length

Nếu chúng tôi giữ thứ tự câu hỏi này, điều đó sẽ được kiểm tra theo thứ tự này 1. nó có tồn tại không? 2. không chuỗi rỗng? 3. đối tượng không rỗng?

vì vậy không có bất kỳ vấn đề nào cho tất cả các biến ngay cả trong trường hợp không tồn tại.



0

Thay vì câu trả lời được chấp nhận, passwordNotEmpty = !!passwordbạn có thể sử dụng

passwordNotEmpty = if password then true else false

Nó cho cùng một kết quả (chỉ khác về cú pháp).

Trong cột đầu tiên là một giá trị, trong cột thứ hai là kết quả của if value:

0 - false
5 - true
'string' - true
'' - false
[1, 2, 3] - true
[] - true
true - true
false - false
null - false
undefined - false
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.