आम कारण हैं: समानता के बजाय
- असाइनमेंट (
=
) के उपयोग (==
/===
)
- समारोह
foo() = 42
बजाय गुजर तर्क (foo(42)
) के परिणाम के लिए बताए
- बस सदस्य नाम गायब (यानी कुछ डिफ़ॉल्ट चयन मानते हैं):
getFoo() = 42
getFoo().theAnswer = 42
या सरणी अनुक्रमणिका के बजाय getArray()[0]= 42
के बजाय getArray() = 42
ing इस विशेष मामले आप ==
(या बेहतर ===
- What exactly is Type Coercion in Javascript?) का उपयोग करना चाहते में समानता के लिए जाँच करने के लिए (जैसे if(one === "rock" && two === "rock")
, लेकिन यह वास्तविक कारण आप त्रुटि हो रही है जटिल काम है।
त्रुटि का कारण Operator precedence है। विशेष रूप से हम &&
(प्राथमिकता 6) और =
(प्राथमिकता 3) की तलाश में हैं।
की प्राथमिकता के अनुसार अभिव्यक्ति में ब्रेसिज़ रखते हैं - &&
तो यह पहले समान 3+4*5+6
3+(4*5)+6
के रूप में एक कैसे करेंगे निष्पादित किया जाता है =
से अधिक है:
if(one= ("rock" && two) = "rock"){...
अब हम a = b = 42
जैसे कई कार्य के लिए इसी तरह की अभिव्यक्ति है जो a = (b = 42)
के रूप में निष्पादित दाएं से बाएं सहयोगीता के कारण। तो अधिक ब्रेसिज़ जोड़ने:
if(one= ( ("rock" && two) = "rock") ){...
अंत में हम वास्तविक समस्या के लिए पहुंचे: ("rock" && two)
एल-मूल्य है कि को सौंपा जा सकता करने के लिए मूल्यांकन नहीं किया जा सकता है (इस विशेष मामले में यह truthy रूप two
की मूल्य हो जाएगा) ।
ध्यान दें कि यदि आप ब्रेसिज़ के साथ प्रत्येक "समानता" के आस-पास कथित प्राथमिकता से मेल खाने के लिए ब्रेसिज़ का उपयोग करेंगे, तो आपको कोई त्रुटि नहीं मिलती है।जाहिर है कि भी अलग परिणाम की तुलना में आप उम्मीद थी उत्पादन - दोनों चर के मूल्य में परिवर्तन और से logial && के व्यवहार के कारण "rock" && "rock"
दो तारों पर "rock"
में जिसके परिणामस्वरूप (जो बारी में truthy है) हर समय &&
कार्य करें:
if((one = "rock") && (two = "rock"))
{
// always executed, both one and two are set to "rock"
...
}
त्रुटि और अन्य मामलों में जब यह भी हो सकता है पर और भी अधिक जानकारी के लिए - देखने के विनिर्देश:
Assignment
LeftHandSideExpression = AssignmentExpression
...
Throw a SyntaxError exception if the following conditions are all true:
...
IsStrictReference(lref) is true
Left-Hand-Side Expressions
और The Reference Specification Type IsStrictReference समझा:
... function calls are permitted to return references. This possibility is admitted purely for the sake of host objects. No built-in ECMAScript function defined by this specification returns a reference and there is no provision for a user-defined function to return a reference...
तीन "टाई" मामलों में सरल किया जा सकता एक भी 'अगर (एक == दो)' –