문자열이 null인지 비어 있는지 확인하는 가장 쉬운 방법


87

비어 있거나 null 문자열을 확인하는 코드가 있습니다. 테스트 중입니다.

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

내가 궁금한 것은 not email? or email is ''. string.IsNullOrEmpty(arg)한 번의 호출로 CoffeeScript에서 C # 에 해당하는 작업을 수행 할 수 있습니까 ? 나는 항상 그것을위한 함수를 정의 할 수 있지만 (내가했던 것처럼) 언어에 내가 놓친 것이 있는지 궁금하다.

답변:


118

예:

passwordNotEmpty = not not password

이하 :

passwordNotEmpty = !!password

1
이것은 두 답변 중 더 "javascript-y"입니다. 특히 !!버전 을 사용하는 경우 본질적으로 부울로 변환하는 일반적인 방법입니다. 중요한 경우 Jeremy가 제안한 함수를 정의하는 것보다 거의 확실히 빠릅니다.
Aaron Dufour 2011

그들은 모두 작동하지만 이것은 가장 많은 찬성표를 얻었습니다. 나는 가독성을 위해 stackoverflow.com/q/8127920/30946 을 좋아 합니다.
jcollum 2011

3
그것은 빈 작동하지 않습니다 그래서 ... 모든 공백 문자열을 실패
Arkhitech

1
@Arkhitech blank는 비어있는 것과 같지 않으므로 작동합니다.
jcollum 2014

2
가독성에 대한 나의 취향에 비해 너무 "영리하다". 내가 그것을 사용합니다 생각하지만, 좋은 일 생각하지 않는다
PandaWood

37

완전히 동일하지는 않지만 null이 email?.length아니고 속성 email이 0이 아닌 경우에만 진실됩니다 .length. 당신이 만약 not당신이 문자열과 배열을 모두 원하는대로이 값은 결과는 행동해야한다.

경우 email입니다 null또는이없는 .length한 다음 email?.length에 평가합니다 nullfalsey이다. 가있는 .length경우이 값은 길이로 평가되며 비어 있으면 거짓이됩니다.

함수는 다음과 같이 구현 될 수 있습니다.

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

1
@pyrotechnick이 질문은 배열과 문자열을 구별하는 것에 대해 묻지 않았습니다. null 값과 빈 문자열을 비어 있지 않은 문자열과 구별하는 것에 대해 질문했습니다. 내 요점은 코드가 null 값과 빈 배열을 비어 있지 않은 배열과 구별 할 수 있다는 것이지만 그것은 질문의 범위를 벗어났습니다.
제레미

그럼에도 불구하고 "eitherStringEmpty"는 제공 한 메소드의 잘못된 이름입니다.
pyrotechnick

14

이것은 "진실"이 도움이되는 경우입니다. 이를 위해 함수를 정의 할 필요조차 없습니다.

test1 = not (email and password)

왜 작동합니까?

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

1
.trim()유효성 검사 논리의 일부로 이미 값을 호출했다고 가정합니다 . 대답은 CS 구문에 관한 것입니다.
Ricardo Tomasi

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

먼저 이메일이 정의되지 않았고 존재 연산자로 null이 아닌지 확인한 다음 and email이메일 문자열이 비어있는 경우에만 해당 부분이 false를 반환합니다.



1

콘텐츠가 null이 아니고 배열이 아닌 문자열인지 확인해야하는 경우 간단한 비교 유형을 사용합니다.

 if typeof email isnt "string"

typeof email isnt "string"모두에 대해 false를 반환 ''하고'a'
jcollum

1

여기입니다 jsfiddle 이 일을 아주 쉬운 방법을 설명은.

기본적으로 이것은 자바 스크립트입니다.

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

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

coffescript에서 :

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

이것이 누군가를 돕기를 바랍니다 :)


1

나는 물음표가 사물이 존재한다면 함수를 호출하는 가장 쉬운 방법이라고 생각합니다.

예를 들면

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

색상을 얻고 싶지만 차가있는 경우에만 ...

coffeescript :

 car?.color

자바 스크립트로 번역 :

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

실존 연산자 http://coffeescript.org/documentation/docs/grammar.html#section-63 이라고합니다 .


빈 문자열은 존재 확인을 위해 true를 반환합니다.
jcollum 2014 년

1

@thejh의 대답이 빈 문자열을 확인하기에 충분하다고 확신하지만 '존재합니까?'라는 것을 자주 확인해야한다고 생각합니다. 그런 다음 '비어 있습니까? 문자열, 배열 및 객체 포함 '

이것은 CoffeeScript가이를 수행하는 단축 방법입니다.

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

이 질문 순서를 유지하면 순서 1로 확인됩니다. 존재합니까? 2. 빈 문자열이 아닙니까? 3. 비어 있지 않습니까?

그래서 존재하지 않는 경우에도 모든 변수에 문제가 없었습니다.



0

수락 된 답변 대신 passwordNotEmpty = !!password사용할 수 있습니다.

passwordNotEmpty = if password then true else false

동일한 결과를 제공합니다 (구문의 차이 만).

첫 번째 열에는 값이 있고 두 번째 열에는 다음 결과가 있습니다 if value.

0 - false
5 - true
'string' - true
'' - false
[1, 2, 3] - true
[] - true
true - true
false - false
null - false
undefined - false
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.