जवाबों:
JQuery नहीं। YUI नहीं। नहीं (आदि)
चौखटे उपयोगी हो सकते हैं, लेकिन वे कभी-कभी यह जानकारी देते हैं कि जावास्क्रिप्ट और DOM वास्तव में आपसे कैसे काम करते हैं। यदि आपका उद्देश्य "मैं जावास्क्रिप्ट जानता हूं" कहने में सक्षम है, तो एक फ्रेमवर्क में बहुत समय का निवेश करना इसका विरोध है।
यहाँ कुछ जावास्क्रिप्ट भाषा विशेषताएँ दी गई हैं जिन्हें आपको पता होना चाहिए कि यह क्या कर रही है और इसे पकड़ा नहीं जाना चाहिए, लेकिन जो कई लोगों के लिए तुरंत स्पष्ट नहीं हैं:
वह object.prop
और object['prop']
एक ही बात है (ताकि आप कृपया उपयोग करना बंद कर सकें eval
, धन्यवाद); वह वस्तु गुण हमेशा तार (सरणियों के लिए भी) होते हैं; क्या for
... in
के लिए है (और यह क्या नहीं है )।
संपत्ति-सूँघने; क्या undefined
है (और क्यों यह बदबू आ रही है ); क्यों प्रतीत होता है कि अल्पज्ञात in
ऑपरेटर लाभदायक है और चेक typeof
/ से अलग है undefined
; hasOwnProperty
; का उद्देश्य delete
।
कि Number
डेटाटाइप वास्तव में एक फ्लोट है; फ़्लोट्स का उपयोग करने की भाषा-स्वतंत्र कठिनाइयाँ; parseInt
अष्ट जाल से बचना ।
नेस्टेड फंक्शन स्कूपिंग; उस var
दायरे में उपयोग की आवश्यकता जिसे आप आकस्मिक ग्लोबल्स से बचना चाहते हैं; कैसे scopes को बंद करने के लिए इस्तेमाल किया जा सकता है; बंद लूप समस्या ।
वैश्विक चर और window
संपत्तियां कैसे टकराती हैं; कैसे वैश्विक चर और दस्तावेज़ तत्व आपस में टकराए नहीं, बल्कि IE में हैं; इससे var
बचने के लिए वैश्विक दायरे में उपयोग की आवश्यकता ।
कोड से पहले एक परिभाषा function
को ' फहराने ' के लिए यह कथन कैसे कार्य करता है; फ़ंक्शन स्टेटमेंट और फ़ंक्शन अभिव्यक्तियों के बीच का अंतर; क्यों फ़ंक्शन फ़ंक्शन नाम का उपयोग नहीं किया जाना चाहिए ।
कंस्ट्रक्टर कैसे कार्य करता है, prototype
संपत्ति और new
ऑपरेटर वास्तव में काम करते हैं; सामान्य वर्ग / उपवर्ग / उदाहरण प्रणाली जिसे आप वास्तव में चाहते थे, बनाने के लिए इसके दोहन के तरीके ; जब आप प्रोटोटाइप के बजाय क्लोजर-आधारित ऑब्जेक्ट का उपयोग करना चाहते हैं। (अधिकांश जेएस ट्यूटोरियल सामग्री इस पर पूरी तरह से भयानक है; इसे सीधे मेरे सिर में लाने में मुझे कई साल लग गए।)
this
कॉल-टाइम पर कैसे निर्धारित किया जाता है, बाध्य नहीं; परिणामी तरीके से काम करने का तरीका वैसा नहीं होता जैसा आप अन्य भाषाओं से उम्मीद करते हैं; कैसे बंद करने या Function#bind
उस के आसपास पाने के लिए इस्तेमाल किया जा सकता है।
अन्य ECMAScript पांचवें संस्करण की तरह indexOf
, forEach
और कार्यात्मक-प्रोग्रामिंग विधियों परArray
; पुराने ब्राउज़रों को कैसे ठीक करें, यह सुनिश्चित करने के लिए कि आप उनका उपयोग कर सकते हैं; कॉम्पैक्ट, पठनीय कोड प्राप्त करने के लिए इनलाइन अनाम फ़ंक्शन अभिव्यक्तियों के साथ उनका उपयोग करना।
ब्राउज़र और उपयोगकर्ता कोड के बीच नियंत्रण का प्रवाह; तुल्यकालिक और अतुल्यकालिक निष्पादन; घटनाएं जो नियंत्रण के प्रवाह के अंदर आग लगाती हैं (उदाहरण के लिए फ़ोकस) बनाम घटनाएं और समयबाह्य जो नियंत्रण लौटते समय होती हैं; माना जाता है कि एक समान-तुल्यकालिक alert
बिलिन को कॉल करना संभावित रूप से विनाशकारी फिर से प्रवेश करने का कारण बन सकता है।
क्रॉस-विंडो स्क्रिप्टिंग कैसे प्रभावित करती है instanceof
; क्रॉस-विंडो स्क्रिप्टिंग विभिन्न दस्तावेज़ों पर नियंत्रण प्रवाह को कैसे प्रभावित करती है; postMessage
उम्मीद है कि यह कैसे तय करेगा।
अंतिम दो वस्तुओं के संबंध में यह उत्तर देखें ।
सबसे अधिक, आपको गंभीर रूप से जावास्क्रिप्ट को देखना चाहिए, यह स्वीकार करते हुए कि यह ऐतिहासिक कारणों से अपूर्ण भाषा (यहां तक कि अधिकांश भाषाओं से भी अधिक) है, और इसके सबसे बुरे संकटों से बचा रहा है। इस मोर्चे पर क्रॉकफोर्ड का काम निश्चित रूप से पढ़ने लायक है (हालाँकि मैं 100% उससे सहमत नहीं हूँ जिस पर "अच्छे हिस्से" हैं)।
this
जो भी आप इसे एक्सेस करने के लिए बाध्य है। इसे आज़माएँ: var o= {b: function(){alert(this===o);}};
फिर o['b']();
-> true
। और अगर आप वास्तव में अजीब चाहते हैं , (o['b'])()
-> true
, लेकिन (c= o['b'])()
-> false
, और केवल मोज़िला में, (true? o['b'] : null)()
-> true
। डब्ल्यू, टी, और वास्तव में, एफ
कि इसे निष्क्रिय किया जा सकता है।
क्रॉकफोर्ड के जावास्क्रिप्ट में लिखे गए सामान को समझना : गुड पार्ट्स एक बहुत अच्छी धारणा है कि एक व्यक्ति एक अच्छा जेएस प्रोग्रामर है।
आप बहुत अच्छी तरह से जान सकते हैं कि JQuery जैसी अच्छी लाइब्रेरी का उपयोग कैसे करें और अभी भी जावास्क्रिप्ट के छिपे हुए हिस्सों को नहीं जानते हैं।
एक और नोट विभिन्न ब्राउज़रों पर डीबगिंग उपकरण है। जेएस प्रोग्रामर को पता होना चाहिए कि विभिन्न ब्राउज़रों में अपने कोड को कैसे डिबग किया जाए।
ओह! और JSLint को जानने से आपकी भावनाएं पूरी तरह से आहत होंगी !!
यदि आप एक सच्चे जावास्क्रिप्ट निंजा बनना चाहते हैं, तो आपको जावास्क्रिप्ट क्विज़ की पूर्णता में हर प्रश्न के उत्तर जानना चाहिए ।
अपनी भूख को बढ़ाने के लिए एक उदाहरण:
(function f(f){
return typeof f();
})(function(){ return 1; });
यह अभिव्यक्ति क्या लौटाती है?
- "संख्या"
- "अपरिभाषित"
- "समारोह"
- त्रुटि
यदि आप नहीं जानते तो आप जावास्क्रिप्ट नहीं जानते:
You don't know JavaScript if you don't know The W3C-DOM
। दोनों चीजें अलग हैं।
..तो जावास्क्रिप्ट नहीं जावा :)
कई, वेबसाइट विकास से शुरू करने वाले कई लोगों ने मुझे बताया है कि जावास्क्रिप्ट सिर्फ सरल जावा है!
अपने आप को एक जावास्क्रिप्ट लाइब्रेरी (Jquery, प्रोटोटाइप, आदि) के साथ परिचित करें।
प्रमुख ब्राउज़रों के डिबगिंग टूल (MSIE 7-8, फ़ायरफ़ॉक्स, क्रोम, सफारी) का उपयोग करना सीखें
उद्योग पर पढ़ें: डगलस क्रॉकफोर्ड की वेबसाइट एक खजाना है, जबकि Ajaxian.com जावास्क्रिप्ट के लिए नए, दिलचस्प और अजीब विचारों को रखने के लिए एक अच्छा ब्लॉग है। कई अन्य संसाधन हैं लेकिन वे हैं जिन्होंने मुझे सबसे अधिक मदद की।
जावास्क्रिप्ट वस्तुओं और समारोह के रूप में प्रथम श्रेणी के नागरिक , कॉलबैक , के बारे में नहीं भूलना घटनाओं और फिर JQuery ।
वह जावास्क्रिप्ट कोई ऐसी चीज नहीं है जिसे एक घंटे में सीखा जा सकता है!
वेरिएबल्स तब तक वैश्विक होते हैं जब तक उन्हें स्थानीय घोषित नहीं किया जाता !!
ख़राब (DoSomething) (केवल 10 बार कहा जाता है):
function CountToTen()
{
for(i=0; i< 10; i++)
{
DoSomething(i);
}
}
function countToFive()
{
for(i=0; i<5; i++)
{
CountToTen();
}
}
CountToFive();
अच्छा (DoSomething () को 50 बार कहा जाता है):
function CountToTen()
{
var i;
for(i=0; i< 10; i++)
{
DoSomething(i);
}
}
function countToFive()
{
var i;
for(i=0; i<5; i++)
{
CountToTen();
}
}
CountToFive();
for (var i=0;
सभी छोरों में आदत
var
समारोह के शीर्ष पर रखना पसंद करता है, क्योंकि यह आपको चर के दायरे के आकार के बारे में धोखा नहीं देता है। js2-mode
यदि आप एक ही फ़ंक्शन var i
में दो अलग-अलग for
छोरों में शिकायत करेंगे , क्योंकि यह आपको सुझाव देता है कि आपके पास दो अलग-अलग चर हैं, और आप नहीं करते हैं। फिर भी, मैं उन var
चीजों से कभी भी अलग होने की कोशिश नहीं करता, जहां से मैं उनकी शुरुआत करता हूं।
अच्छे हिस्सों का उपयोग कैसे करें , और भयावह भागों से कैसे बचें ।
यह जानने के लिए कि जावास्क्रिप्ट को मूल रूप से लाइवस्क्रिप्ट कहा जाता था और मार्केटिंग उद्देश्यों के लिए 'जावा' उपसर्ग संलग्न था, क्योंकि जावा और जावास्क्रिप्ट संबंधित नहीं हैं (जो वे नहीं हैं)।
ओह और डेविड फ्लानगन के 'जावास्क्रिप्ट: द डेफिनिटिव गाइड' के किसी भी संस्करण के मालिक के लिए (यह जानकारी पेज 2 पर है)।
... और उन लोगों की सराहना करने के लिए जो इंटरनेट एक्सप्लोरर 4 के डॉक्यूमेंट को स्थगित करने की कोशिश में पहले गए हैं। [] और नेटस्केप नेविगेटर 4 के डॉक्यूमेंट.लेयर्स [] इससे पहले कि जेक्वेरी ने दर्द को दूर कर लिया।
संपादित करें:
जैसा कि @Kinopiko बताते हैं कि जावास्क्रिप्ट को प्रोजेक्ट मोचा कहा जाता था ( कुछ स्रोत यह भी कहते हैं कि इसे प्रोजेक्ट लाइववायर कहा गया था), लेकिन आमतौर पर यह स्वीकार किया जाता है कि भाषा (ब्रेंडन ईच द्वारा लिखित) को जावा प्रीफ़िक्स को अपनाने से पहले लाइवस्क्रिप्ट के रूप में जारी किया गया था। 1996 की शुरुआत में रिलीज़ हुई।
"I Know JavaScript" कहने के लिए निम्नलिखित के बारे में पता होना चाहिए:
वह जावास्क्रिप्ट अन्य भाषाओं की तुलना में बहुत अलग है जितना आप सोच सकते हैं। इंप्रेशन पाने के लिए इस महान Google टेक टॉक को देखें : http://www.youtube.com/watch?v=hQVTIJBZook
प्रत्येक जावास्क्रिप्ट कोडर को क्या जानना चाहिए?
कैसे के बारे में, मैं 2 क्लिक के साथ आपके प्रयासों को बंद कर सकता हूं। इसलिए यदि संभव हो तो एक वापसी प्रदान करें।
मैं दृढ़ता से जावास्क्रिप्ट को पढ़ने की सलाह देता हूं : द गुड पार्ट्स
आप जावास्क्रिप्ट को जानते हैं यदि आप ऐरे, नंबर, स्ट्रिंग, दिनांक और ऑब्जेक्ट का प्रभावी ढंग से उपयोग कर सकते हैं। गणित और RegExp के लिए प्लस अंक। आपको फ़ंक्शंस लिखने और वेरिएबल्स का उपयोग करने में सक्षम होना चाहिए (सही दायरे में, यानी किसी ऑब्जेक्ट के 'तरीके' के रूप में)।
मैं क्लोजर जानने के बारे में कुछ टिप्पणियां देखता हूं, असाधारण फ़ंक्शन सिंटैक्स, ब्लाब्ला। यह सब इस सवाल के लिए काफी अप्रासंगिक है। अगर आप 100 मीटर डैश को 11 सेकंड के अंदर चला सकते हैं, तो यह कहना कि आप एक धावक हैं।
मैं कहता हूं कि जावास्क्रिप्ट में कुशल बनने में शायद कुछ हफ़्ते लगेंगे। उसके बाद एक विशेषज्ञ, एक निंजा आदि बनने के लिए वर्षों और दर्जनों पुस्तकों और हजारों लाइनों की प्रोग्रामिंग होती है।
लेकिन यह सवाल नहीं था।
ओह, और DOM जावास्क्रिप्ट का हिस्सा नहीं है, और न ही jQuery है। इसलिए मुझे लगता है कि दोनों ही सवाल के लिए समान रूप से अप्रासंगिक हैं।
सरणी । length
विधि सरणी की वस्तुओं की गिनती नहीं है, लेकिन उच्चतम सूचकांक है। जब आइटम सेट किया गया थाundefined
var a = [];
a.length; // === 0
a[10]; // === undefined
a[10] = undefined;
a.length; // === 11
a.pop(); // === undefined
a.length; // === 10
यह व्यवहार एक भाषा डिजाइन बग से अलग है।
jQuery मेरी सबसे अच्छी सिफारिश होगी। केवल कोड के लिए ही नहीं, यह मुहावरा है, शैली है, इसके पीछे की सोच सबसे अधिक अनुकरण के योग्य है।
यह जावास्क्रिप्ट दुनिया में सबसे व्यापक रूप से तैनात भाषा है। (शायद)
किसी भाषा को वास्तव में अच्छी तरह से सीखना और उसके विभिन्न प्रश्नों को समझना (वर्षों के) अनुभव से आता है। यदि आप एक बेहतर प्रोग्रामर बनना चाहते हैं, तो मैं कहूंगा कि डिजाइन पैटर्न को समझना, उन्हें कैसे और कब उपयोग करना है और / या यहां तक कि जब आप उन्हें साकार किए बिना उपयोग कर रहे हैं; तकनीकी वास्तुकला और उपयोगकर्ता अनुभव।
जावास्क्रिप्ट (जावास्क्रिप्ट) भाषा को जानने का मतलब है कि आप किसी भी ढांचे को चुन सकते हैं और उसका उपयोग कर सकते हैं। आपको अनिवार्य रूप से स्रोत कोड में गोता लगाने की आवश्यकता होगी, और यदि आप सभी जानते हैं कि सिंटैक्स एक फ्रेमवर्क या 2 या 3 है, तो आप बहुत दूर नहीं जाएंगे। यह कहते हुए कि, कुछ अलग चौखटों के स्रोत कोड में जाना शायद सबसे अच्छे तरीकों में से एक है कि कैसे जावास्क्रिप्ट का उपयोग किया जा सकता है। फायरबग या वेब इंस्पेक्टर में कोड के माध्यम से कदम रखने के बारे में संदेश देना, फिर जावास्क्रिप्ट दस्तावेज़ीकरण, विशेष रूप से मोज़िला और वेबकिट डॉक्स की जांच करना, ताकि आप जो देख रहे हैं, उसकी अधिक समझ प्राप्त कर सकें।
ऑब्जेक्ट-ओरिएंटेड और फंक्शनल प्रोग्रामिंग के बीच अंतर को समझना, कि जावास्क्रिप्ट दो का एक सेक्सी मिश्रण है और जब और कैसे और दोनों का उपयोग करने के लिए एक हत्यारा कोडबेस और भयानक अनुप्रयोग बनाने के लिए आपको एक बेहतर जावास्क्रिप्ट प्रोग्रामर बना देगा।
बस कुछ पुस्तकों को पढ़ना, विशेष रूप से क्रॉकफोर्ड के "अच्छे हिस्से" जो केवल जावास्क्रिप्ट में अच्छे होने के बारे में अपनी राय प्रस्तुत करते हैं, जबकि जावास्क्रिप्ट के अधिकांश भागों को छोड़ना आपको गलत पैर पर ले जाने वाला है।
दूसरी ओर थॉमस फुक्स जैसे किसी व्यक्ति द्वारा लिखे गए कोड की जांच करना आपको अद्भुत और कुशल जावास्क्रिप्ट लिखने की शक्ति में बहुत अधिक जानकारी देने जा रहा है।
कुछ गोचरों या डब्ल्यूटीएफ को याद करने की कोशिश करने से बहुत मदद नहीं मिलने वाली है, अगर आप एक पुस्तकालय / चौखटे के कोड के माध्यम से कोडिंग और कदम बढ़ाना शुरू कर देंगे, तो विशेष रूप से एक मददगार टिप्पणी, यह देखने के लिए कि वे कुछ खास क्यों इस्तेमाल किए गए हैं? गुण / मान और दूसरों के लिए क्यों और कब विशिष्ट ऑपरेशंस और ऑपरेटरों का उपयोग करना अच्छा है, यह फ्रेमवर्क के लोगों के उपयोग के कोड में है। उदाहरण से सीखना कितना बेहतर है? : ^)
जावास्क्रिप्ट में, प्रदर्शन मायने रखता है।
अपने कोड को ऑप्टिमाइज़ करने के लिए कोई बुद्धिमान कंपाइलर नहीं है इसलिए आपको C #, जावा जैसी भाषाओं की तुलना में जावास्क्रिप्ट कोड लिखते समय अधिक सावधान रहना चाहिए ...
निम्नलिखित बातें भी महत्वपूर्ण हैं:
1) परिवर्तनीय उत्थापन। 2) स्कोप चेन और एक्टिवेशन ऑब्जेक्ट।
और फिर इन चीजों की तरह: :)
3) wtfjs.com
4) सब कुछ एक वस्तु है http://www.lifeinafolder.com/images/Js.jpg
with()
रेखा के साथ और उसके बिना एक जीवन है और कहाँ है।throw
जावास्क्रिप्ट रनटाइम को जानबूझकर रोकने के कथन के साथ कस्टम त्रुटियां बना सकते हैं ।जावास्क्रिप्ट निम्नलिखित कोड की तरह न्यूलाइन वर्ण के साथ रिटर्न कीवर्ड और रिटर्न स्टेटमेंट को अलग करने का समर्थन नहीं करता है (या मेरे jsField पेज पर इसे आज़माएं )
function foo()
{
return
{
bar: 'something'
};
}
$(function()
{
document.write(foo());
});
मुझे समझ नहीं आता कि जावास्क्रिप्ट इस शैली का समर्थन क्यों नहीं करता क्योंकि जावास्क्रिप्ट की डिफ़ॉल्ट शैली के साथ तुलना करने पर बहुत जटिल जावास्क्रिप्ट स्रोत कोड को पढ़ना बहुत आसान है।
पुनश्च। मैंने लगभग 6 साल जावास्क्रिप्ट लिखा है। लेकिन मैं इस बग को खुद के साथ मिला जब मैं निम्नलिखित फ़ंक्शन को निष्पादित करने का प्रयास करता हूं। यह हमेशा अनिर्धारित रहता है। जब मैं डिबगर का उपयोग करता हूं और इस फ़ंक्शन में कदम रखता हूं तो सब कुछ ठीक होता है। मुझे लगता है कि यह मेरे जीवन का सबसे खराब प्रोग्रामिंग बग होना चाहिए।
function JqGridInlineEditor_GenerateTool(cellvalue, options, rowObject, disableEdit, disableDelete)
{
return
(!disableEdit ? '<a class="button edit" href="javascript: void(0);" onclick="JqGridInlineEditor_EditRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Edit.gif'), 'Click here to Edit or \nDouble-click row to edit.') : '') +
(!disableDelete ? '<a class="button delete" href="javascript: void(0);" onclick="JqGridInlineEditor_DeleteRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Delete.png'), 'Click here to Delete or \nSelect row and then press Delete') : '') +
(!disableEdit ? '<a class="button save" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_SaveRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Save.png'), 'Click here to Save or \nPress Enter') : '') +
(!disableEdit ? '<a class="button cancel" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_RestoreRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Cancel.png'), 'Click here to Cancel or \nPress Esc') : '');
}
var foo = "bar" +
), पार्सर पर पढ़ता है।
var foo = 5
और -1;
परिणामस्वरूप फू को 4 पर सेट किया जाएगा, भले ही प्रत्येक अपने आप में मान्य कथन हो।
चूंकि JS एक कार्यात्मक भाषा है, एक सभ्य JS प्रोग्रामर को Y- कॉम्बीनेटर लिखने और यह समझाने में सक्षम होना चाहिए कि यह शीर्ष के शीर्ष पर कैसे काम करता है।
... Google वेब टूलकिट के बारे में , जिसका अर्थ है कि आपके जावास्क्रिप्ट प्रोजेक्ट को शायद अधिक संयमित तरीके से विकसित किया जा सकता है।