Program Tip

JSLint '==='를 예상하고 대신 '=='를 보았습니다.

programtip 2020. 10. 4. 13:09
반응형

JSLint '==='를 예상하고 대신 '=='를 보았습니다.


최근에이 오류가 발생했을 때 JSLint를 통해 일부 코드를 실행했습니다. 이 오류에 대해 재미 있다고 생각하는 것은 자동으로 모든 ==가 ===이어야한다고 가정한다는 것입니다.

정말 말이 되나요? 유형을 비교하고 싶지 않은 인스턴스를 많이 볼 수 있었는데 이것이 실제로 문제를 일으킬 수 있다고 걱정됩니다.

"예상"이라는 단어는이 작업을 매번 수행해야 함을 의미합니다 ..... 그게 말이 안되는 것입니다.


유형 변환이 작동 하는 방식===이해 하지 않고 맹목적으로 IMO를 사용 하는 것은별로 의미가 없습니다.

Equals 연산자에 대한 주된 두려움==비교되는 유형에 따른 비교 규칙이 다음과 같은 경우 연산자를 비전 이적으로 만들 수 있다는 것입니다.

A == B AND
B == C

실제로 다음을 보장하지는 않습니다.

A == C

예를 들면 :

'0' == 0;   // true
 0  == '';  // true
'0' == '';  // false

Strict Equals 연산자 ===는 같은 유형의 값을 비교할 때 실제로 필요하지 않습니다. 가장 일반적인 예입니다.

if (typeof foo == "function") {
  //..
}

우리는의 결과 비교 typeof연산자, 항상 문자열 로, 문자열 리터럴을 ...

당신이 강제 형 변환 규칙을 알고있을 때 무언가가있는 경우 또는, 예를 들어, 확인 null또는 undefined뭔가 :

if (foo == null) {
  // foo is null or undefined
}

// Vs. the following non-sense version:

if (foo === null || typeof foo === "undefined") {
  // foo is null or undefined
}

JSLint는 본질적으로 Javascript 구문이 허용하는 것보다 더 방어 적입니다.

JSLint 문서에서 :

==!=연산자는 비교하기 전에 강제 형 변환을한다. 이것은 사실이되기 때문에 나쁘다 ' \t\r\n' == 0. 이것은 유형 오류를 가릴 수 있습니다.

다음 값 중 하나와 비교할 때 ===or !==연산자 (유형 강제 변환을 수행하지 않음)를 사용하십시오.0 '' undefined null false true

값이 진실 인지 거짓 인지에만 관심이 있다면 짧은 형식을 사용하세요. 대신에

(foo != 0)

그냥 말해

(foo)

그리고 대신

(foo == 0)

말하다

(!foo)

===!==운영이 바람직하다.


JSLint는 좋은 JavaScript가 무엇인지에 대한 한 사람의 생각을 강요한다는 것을 명심하십시오. 제안하는 변경 사항을 구현할 때 여전히 상식을 사용해야합니다.

In general, comparing type and value will make your code safer (you will not run into the unexpected behavior when type conversion doesn't do what you think it should).


Triple-equal is different to double-equal because in addition to checking whether the two sides are the same value, triple-equal also checks that they are the same data type.

So ("4" == 4) is true, whereas ("4" === 4) is false.

Triple-equal also runs slightly quicker, because JavaScript doesn't have to waste time doing any type conversions prior to giving you the answer.

JSLint is deliberately aimed at making your JavaScript code as strict as possible, with the aim of reducing obscure bugs. It highlights this sort of thing to try to get you to code in a way that forces you to respect data types.

But the good thing about JSLint is that it is just a guide. As they say on the site, it will hurt your feelings, even if you're a very good JavaScript programmer. But you shouldn't feel obliged to follow its advice. If you've read what it has to say and you understand it, but you are sure your code isn't going to break, then there's no compulsion on you to change anything.

You can even tell JSLint to ignore categories of checks if you don't want to be bombarded with warnings that you're not going to do anything about.


A quote from http://javascript.crockford.com/code.html:

=== and !== Operators.

It is almost always better to use the === and !== operators. The == and != operators do type coercion. In particular, do not use == to compare against falsy values.

JSLint is very strict, their 'webjslint.js' does not even pass their own validation.


To help explain this question and also explain why NetBeans (from) 7.3 has started showing this warning this is an extract from the response on the NetBeans bug tracker when someone reported this as a bug:

It is good practice to use === rather than == in JavaScript.

The == and != operators do type coercion before comparing. This is bad because it causes ' \t\r\n' == 0 to be true. This can mask type errors. JSLint cannot reliably determine if == is being used correctly, so it is best to not use == and != at all and to always use the more reliable === and !== operators instead.

Reference


If you want to test for falsyness. JSLint does not allow

if (foo == null)

but does allow

if (!foo)

Well it can't really cause problems, it's just giving you advice. Take it or leave it. That said, I'm not sure how clever it is. There may well be contexts in which it doesn't present it as an issue.

참고URL : https://stackoverflow.com/questions/3735939/jslint-expected-and-instead-saw

반응형