目次
引用:
代码:
コード:
ホームページ ウェブフロントエンド jsチュートリアル JavaScript 初心者のための 24 の実践的なヒント [TUTS]_JavaScript スキル

JavaScript 初心者のための 24 の実践的なヒント [TUTS]_JavaScript スキル

May 16, 2016 pm 06:51 PM
javascript 実践的なアドバイス 初心者

注:本文多次用到Firebug的console对象,请参考Firebug Console API 。关于firebug的更详细介绍,请猛击这里
1. 用 === 代替 ==

JavaScript里有两种不同的相等运算符:===|!== 和==|!=。相比之下,前者更值得推荐。请尽量使用前者。

引用:
“如果两个比较对象有着同样的类型和值,===返回true,!==返回false。”

– JavaScript: The Good Parts
不过,如果使用==和!=,在操作不同数据类型时, 你可能会遇到一些意想不到的问题。在进行相等判断前,JavaScript会试图将它们转换为字符串、数字或 Boolean量。

2. 避免使用Eval函数

Eval函数把一个字串作为参数,并把字串作为JavaScript语句执行,返回结果(参考)。

此函数不仅会降低你脚本的执行效率,而且还大大增加了安全风险,因为它赋予了作为文本的参数太大的权利。千万别用!

3. 不要使用快速写法

技术上说,你可以省略掉大部分花括弧和句尾分号,绝大多数浏览器都能正确执行以下语句:
复制内容到剪贴板
代码:
<font face="新宋体">if(someVariableExists)<br>   x = false</font>
不过,如果是这样的呢:
复制内容到剪贴板
代码:
<font face="新宋体">if(someVariableExists)<br>   x = false<br>   anotherFunctionCall();</font>
你可能会认为它和下面的语句相等:
复制内容到剪贴板
代码:
<font face="新宋体">if(someVariableExists) {<br>   x = false;<br>   anotherFunctionCall();<br>}</font>
不幸的是,事实并非如此。现实情况是它等价于:
复制内容到剪贴板
代码:
<font face="新宋体">if(someVariableExists) {<br>   x = false;<br>}<br>anotherFunctionCall();</font>
如您注意到的,再漂亮的缩进也不能代替这华丽的花括弧。在所有情况下都请写清楚花括号和句尾分号。在只有一行语句的时候能偶尔省略掉,虽然下这么做也是极度不被推荐的:
复制内容到剪贴板
代码:
<font face="新宋体">if(2 + 2 === 4) return 'nicely done';</font>
多考虑下将来吧,孩子

假设,在将来的开发过程中,你需要为这个 if 语句添加更多的命令呢?到时候你还不是得把括号给加上?

4. 好好利用JS Lint

JSLint 是由 Douglas Crockford 编写的一个调试器。你只需要贴上你的代码,它就能快速为您扫描出任何明显的错误和问题。
引用:
“JSLint扫描接收的代码。发现问题,描述问题,并给出其在源码中的大概位置。可发现的问题包括但不限于语法错误,虽然语法错误确实是最常见的。JSLint也会用
约定俗成的习惯检查代码的格式化风格,以及结构错误。通过JSLint的扫描并不能保证你的程序就完全正确。它只是为您提供了额外一双发现错误的眼睛。”


– JSLint 文档
完成代码之前,把它放到JSLint里检查一下,快速消灭你的无心之过。

5. 在页面底部加载脚本

正如下图所示:


请记住—— 我们要千方百计保证客户端的页面载入速度尽可能的快。而脚本没载入完成,浏览器就没法加载页面的剩余部分。

如果你的JS文件只是添加一些额外功能——例如,为点击某链接绑定事件——那大可以等页面加载基本完成后再做。把JS文件放到页面最后,body的结束标签之前,这样做最好了。

更好的写法是
复制内容到剪贴板
代码:
<font face="新宋体"><p>超哥是世界上最帅的人。benhuoer.com是世界上最好看的博客。</p><br><script type="text/javascript" src="path/to/file.js"></script><br><script type="text/javascript" src="path/to/anotherFile.js"></script><br></body><br></html> <!--0--><!--1--></font>
6. 在 For 语句外部声明变量

当需要执行冗长的for语句时,不要让JavaScript引擎每次都重复那些没有必要的操作。例如:

这样不好
复制内容到剪贴板
代码:
<font face="新宋体">for(var i = 0; i < someArray.length; i++) {<BR> var container = document.getElementById('container');<BR> container.innerHtml += 'my number: ' + i;<BR> console.log(i);<BR>}</FONT>
这段代码每次都重新定义数组长度,每次都在遍历DOM寻找container元素 —— 太傻了!

这样好多了
复制内容到剪贴板
代码:
<FONT face=新宋体>var container = document.getElementById('container');<BR>for(var i = 0, len = someArray.length; i < len; i++) {<BR> container.innerHtml += 'my number: ' + i;<BR> console.log(i);<BR>}</FONT>
我要给留言改进这段代码的人额外惊喜!欢迎大家留言讨论!

7. 快速构建字串

要对一个数组或对象做循环操作时,不要老惦记着一表人才的for语句,拿点创意出来嘛!明明就还有很多更快的办法:
复制内容到剪贴板
代码:
<FONT face=新宋体>var arr = ['item 1', 'item 2', 'item 3', ...];<BR>var list = '<ul><li>' + arr.join('</li><li>') + '</li></ul>';</font>
引用:
“没那么多繁文缛节来烦你;你就信我一次好了(或者你也可以自己试一试)—— 这真的是迄今能找到的最快办法了!

用点土办法,也别管它背后究竟发生了什么抽象的东西,通常土办法都比那些优雅的办法要快捷得多!”

– James Padolsey, james.padolsey.com
8. 减少全局变量
引用:
“把你踩在全局的那些乱七八糟的脚印都归于一人名下,能显著降低与其他应用、小工具或JS库冲突的可能性。”

– Douglas Crockford
复制内容到剪贴板
代码:
<font face="新宋体">var name = 'Jeffrey';<br>var lastName = 'Way';<br>function doSomething() {...}<br>console.log(name); // Jeffrey -- or window.name</font>
更好的写法
复制内容到剪贴板
代码:
<font face="新宋体">var DudeNameSpace = {<br>   name : 'Jeffrey',<br>   lastName : 'Way',<br>   doSomething : function() {...}<br>}<br>console.log(DudeNameSpace.name); // Jeffrey</font>
注意看,我们是如何戏剧化地把“乱七八糟的脚印”都归到“DudeNameSpace”这对象之下的。

9. 写好注释

可能一开始你会觉得并无必要,但相信我,你将来会主动想要尽可能写好代码的注释的。当你几个月后再回看某项目时,结果却发现很难想起当时写某句东西时脑子在想的什么了,是不是很让人沮丧呢?或者,如果有同事要修订你的代码呢?一定,一定要为你代码里的重要部分加上注释。
复制内容到剪贴板
代码:
<font face="新宋体">// 遍历数组,输出各自名称<br>for(var i = 0, len = array.length; i < len; i++) {<BR> console.log(array);<BR>}</FONT>
10. 试试渐进增强

一定要记得为未启用JavaScript的情况提供替代方案。大家可能会认为,“大部分我的访客都启用了JavaScript的,我才不用担心”。这样的话,你可就大错特错了!

你有没有试过看看禁用JavaScript后你那漂亮的滑动器都成啥样了?(你可以下载 Web Developer ToolBar 轻松完成这项任务。)禁用之后你的网站可能就彻底失去了可用性!经验之谈:开发初期总是按照没有JavaScript来设计你的网站,之后再进行渐进地功能增强,小心翼翼地改变你地布局。

11. 不要传递字串给 “setInterval” 或 “setTimeout”

看看下面的代码:
复制内容到剪贴板
代码:
<FONT face=新宋体>setInterval(<BR>"document.getElementById('container').innerHTML += 'My new number: ' + i", 3000<BR>);</FONT>
不仅执行不高效,而且和 eval 函数有着同样的高风险。千万不要把字串传递给 setInterval 和 setTimeout。恰当的做法是,传递一个函数名:
复制内容到剪贴板
代码:
<FONT face=新宋体>setInterval(someFunction, 3000);</FONT>
12. 不要使用with语句

初识之下,“with”语句似乎还挺好用的。它用于设置代码在特定对象中的作用域。其基本用法是提供深入到对象中处理元素的快速写法。例如:
复制内容到剪贴板
代码:
<FONT face=新宋体>with (being.person.man.bodyparts) {<BR> arms = true;<BR> legs = true;<BR>}</FONT>
– 等价于 —
复制内容到剪贴板
代码:
<FONT face=新宋体>being.person.man.bodyparts.arms = true;<BR>being.person.man.bodyparts.legs= true;</FONT>
不幸的是,测试表明,若你要为对象插入新成员,with的表现非常糟糕,它的执行速度非常缓慢。替代方案是声明一个变量:
复制内容到剪贴板
代码:
<FONT face=新宋体>var o = being.person.man.bodyparts;<BR>o.arms = true;<BR>o.legs = true;</FONT>
13. 使用 {},而不用New Object()

在JavaScript有多种方式能新建对象。最传统的方法是 new 语句,如下:
复制内容到剪贴板
代码:
<FONT face=新宋体>var o = new Object();<BR>o.name = 'Benhuoer';<BR>o.lastName = 'Yang';<BR>o.someFunction = function() {<BR> console.log(this.name);<BR>}</FONT>
不过,这一方法读起来却比较糟糕。我强烈建议你采用下面这种在文字样式上更为强健的写法:

更好的写法
复制内容到剪贴板
代码:
<FONT face=新宋体>var o = {<BR> name: 'Jeffrey',<BR> lastName = 'Way',<BR> someFunction : function() {<BR> console.log(this.name);<BR> }<BR>};</FONT>
注意,如果你想新建一个空对象,用 {} 就能行:
复制内容到剪贴板
代码:
<FONT face=新宋体>var o = {};</FONT>
引用:
“对象字面符(Objects literals)帮助我们写出支持很多特性,同时又关联性强、简明直接的代码。没必要直接调用新建语句,然后再费心维护声明变量和传递变量的语句之间的正确顺序,等等。” – dyn-web.com
14. 使用[],而不用New Array()

新建数组时的同类型运用。

行得通的写法
复制内容到剪贴板
代码:
<FONT face=新宋体>var a = new Array();<BR>a[0] = "Joe";<BR>a[1] = 'Plumber';</FONT>
更好的写法
复制内容到剪贴板
代码:
<FONT face=新宋体>var a = ['Joe','Plumber'];</FONT>
引用:
“在JavaScript编程中经常遇到的一个错误是,该用数组时却用了对象,该用对象时却用了数组。规则其实很简单:当属性名是小的连续整数时,你应该使用数组。其他情况,使用对象。” – Douglas Crockford
15. 一长列变量声明?别写那么多var,用逗号吧
复制内容到剪贴板
代码:
<FONT face=新宋体>var someItem = 'some string';<BR>var anotherItem = 'another string';<BR>var oneMoreItem = 'one more string';</FONT>
更好的写法
复制内容到剪贴板
代码:
<FONT face=新宋体>var someItem = 'some string',<BR> anotherItem = 'another string',<BR> oneMoreItem = 'one more string';</FONT>
…不言自明。我不知道这样做能否提升代码执行速度,但是确实让你的代码干净许多。

17. 千万千万记得写分号

大部分浏览器都允许你不写句尾分号:
复制内容到剪贴板
代码:
<FONT face=新宋体>var someItem = 'some string'<BR>function doSomething() {<BR> return 'something'<BR>}</FONT>
之前已经说过,这样做会造成潜在的更大、更难以发现的问题:

更好的写法
复制内容到剪贴板
代码:
<FONT face=新宋体>var someItem = 'some string';<BR>function doSomething() {<BR> return 'something';<BR>}</FONT>
18. “For in” 语句

遍历对象时,你可能会发现你还需要获取方法函数。所以遇到这种情况时,请一定记得给你的代码包一层 if 语句,用以过滤信息。
复制内容到剪贴板
代码:
<FONT face=新宋体>for(key in object) {<BR> if(object.hasOwnProperty(key) {<BR> ...then do something...<BR> }<BR>}</FONT>
引自[/i][i] Douglas Crockford 所作:[/i][i] JavaScript: The Good Parts

19. 使用Firebug的“Timer”功能优化你的代码

想要轻松地快速了解某项操作的用时吗?使用Firebug的timer功能来记录结果好了。
复制内容到剪贴板
代码:
<FONT face=新宋体>function TimeTracker(){<BR>console.time("MyTimer");<BR>for(x=5000; x > 0; x--){}<br>console.timeEnd("MyTimer");<br>}</font>
20. 読んで、読んで、読んで…

私は Web 開発ブログ (このブログのような!) の大ファンです。食事と就寝前にを読むしかないようです~ ウェブ開発に関する良い本をベッドサイドテーブルに置いてください!次の本のリストは私のお気に入りです:



読む…何度も読んでください!今も読んでいます。

21. 自己決定関数

関数の呼び出しと比較して、ページまたは親関数のロード時に関数を自動的にロードさせます。非常に簡単で便利な実行方法です。関数を親でラップし、かっこを追加するだけで、基本的に定義した関数がトリガーされます (詳細)。
コンテンツをクリップボードにコピーします
コード:
<font face="新宋体">(function doSomething() {<code id="code28"><font face="新宋体">(function doSomething() {<br>   return {<br>      name: 'jeff',<br>      lastName: 'way'<br>   };<br>})();</font> return {
name: 'jeff', lastName: 'way' };})();


22. ネイティブ JavaScript はコード ライブラリを使用するよりも常に高速です


jQuery や Mootools などの JavaScript ライブラリを使用すると、特に AJAX 操作が必要な場合に、コードの作成プロセスにかかる時間を大幅に節約できます。ただし、コードが適切に記述されている限り、ネイティブ JavaScript はコード ライブラリを使用するよりも常に高速に実行されることを覚えておく必要があります。 jQuery の「each」メソッドはループ操作に非常に便利ですが、元の for ステートメントを使用した方がずっと高速です。

23. Crockford の JSON.Parse
JavaScript 2 には JSON プロセッサが組み込まれていますが、この記事の執筆時点では、まだ自分で実装する必要があります。 JSON の作成者である Douglas Crockford は、すぐに使用できるハンドラーを作成しました。ここからダウンロードできます
このコードをインポートすると、新しい JSON グローバル オブジェクトを作成し、.json ファイルを処理できます。 <font face="新宋体">var response = JSON.parse(xhr.responseText); <br>var container = document.getElementById('container');<br>for(var i = 0, len = response.length; i < len; i ) {<br>container.innerHTML = '<li>' response.name ' : ' response.email '</li>';<br>}</font>
コンテンツをクリップボードにコピーします コード:<font face="新宋体">var response = JSON.parse(xhr.responseText) </font>varcontainer = document.getElementById('container');
for(var i = 0, len = response.length; i < len; i ) {
container.innerHTML = '
  • ' response.name ' : 'response.email '
  • ';}JSON の詳細については、
    を参照してください
    24. 「言語」を削除する <font face="新宋体"><script type="text/javascript" language="javascript"><br>...<br></script></font>


    何年も前には、言語はまだすべてのスクリプト タグに必須の属性でした。 コンテンツをクリップボードにコピーします コード:
    <font face="新宋体"><script type="text/javascript" language="javascript"><br>...</ script></font>しかし、この属性は長い間役に立たなかったので、削除してください。 以上です、皆さん~以上、以上が JavaScript 初心者向けの 24 のヒントです。親愛なる友人の皆さん、どう思いますか?何か簡単なヒントはありますか?辛抱強く読んでいただきありがとうございます。
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    初心者向けにミスト ロック キングダムをプレイするためのヒント 初心者向けにミスト ロック キングダムをプレイするためのヒント Jan 28, 2024 pm 03:33 PM

    ミストロック キングダムは、プレイヤーが Sons of Fire としてプレイして生き残り、探索できるオープンワールド ゲームです。このゲームは、アクション RPG チャレンジのユニークなエンターテイメントを組み合わせており、プレイヤーに無限の驚きと喜びをもたらします。ゲームでは、プレイヤーはリソース、環境、武器などを探索できます。初心者プレイヤーの中には、ゲームの始め方に興味がある人もいるかもしれません。この紹介と共有では、関連するスタート ガイドをいくつか提供します。フォグ ロック キングダムの初心者向けヒント: 瘴気に包まれた地域の危険度は異なります。探索プロセス中に、マップの新しいエリアが徐々にロック解除され、瘴気に包まれた地域の位置が確認できるようになります。マップは2色で区別されており、青色のエリアは短時間しか進入できず、キャラクターの能力レベルに応じて滞在可能時間も変化する。

    WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

    WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

    アンカーポイントアドベント ノービス十中隊おすすめキャラクター アンカーポイントアドベント ノービス十中隊おすすめキャラクター Feb 20, 2024 pm 02:30 PM

    「アンカーアライバル」は、高解像度の美少女 2D をテーマにした 3D ターン制カードゲームです。プレイヤーが探索して体験できる豊富でエキサイティングなキャラクターの組み合わせを提供します。高品質のラインナップの強力な組み合わせが数多くあります。新規プレイヤーは初心者にも気になる初心者向けの強力なキャラは何ですか? 初心者が10連ゴールドを獲得するための選択の参考を見てみましょう! アンカーポイント降臨は初心者向けの強力なキャラです。10連の最初のピックはアリスです。主に単体雷系爆発キャラで、出力も爆発力が高く、初心者にも優しいので選ぶのがオススメです。ゴールド10連は「アリス」+「アンテロープ」の組み合わせがおすすめ アリスはゴールドパイア属性を出力するのに最も適したキャラクターであり、初心者カードプールの他の2キャラクターと比べても少しも強いです。アリスはスペシャルをパスできる

    バッチインデントの使い方を学ぶことは、PyCharm 初心者が習得しなければならないスキルです バッチインデントの使い方を学ぶことは、PyCharm 初心者が習得しなければならないスキルです Dec 30, 2023 pm 12:58 PM

    PyCharm の初心者向けの必須スキル: バッチ インデントの使用をマスターするには、特定のコード サンプルが必要です。 概要: PyCharm は、開発者の効率向上に役立つ多くの実用的なツールと機能を提供する強力な Python 統合開発環境 (IDE) です。日常のコーディングプロセスでは、コードの形式を整然と美しく保つためにコードをインデントする必要があることがよくあります。 PyCharm が提供するバッチ インデント機能を使用すると、コードを迅速にバッチ インデントし、コーディング効率を向上させることができます。この記事では Py について説明します

    WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

    WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

    エンシェント クラウンの初心者ガイドとゲームプレイの紹介 エンシェント クラウンの初心者ガイドとゲームプレイの紹介 Feb 20, 2024 am 11:20 AM

    Crown of the Ancients は、西洋の魔法の冒険をベースにした高品質で戦略的なカード モバイル ゲームです。ゲーム内では秘密の探索、遺跡の冒険、全国選手権などの特別なゲームプレイがあなたを待っています。したがって、初心者プレイヤーがこのゲームをすぐに始めたい場合は、初心者ガイドが不可欠です。今日、編集者が関連するガイドをお届けしますので、見てみましょう。エンシェントクラウンの初心者向けガイド、ゲームプレイ、エリア開放スタイルの概要: 1. ダイヤモンド蓄積フロー:すべてはダイヤモンドを蓄積することに集中しており、村を出てから熱心に働き始めます。メインの魔法の武器、ダイヤモンドを必要とする 3 つのフライホイール アクティビティなどを除いて、その他は無視されます。主にそのうちの 1 つに重点が置かれます。ヒーロー チャレンジには注意を払わないでください。できるだけ多く戦えます。 、そしてそれを強制しないでください。利点: ダイヤモンドを集めるためにいじるだけで、村を出た後、ダイヤモンドを使った最新のアクティビティにすぐにアクセスでき、新しいハードウェア ヒーロー シリーズを入手でき、ダイヤモンドは壊れます。

    WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

    WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

    JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

    JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

    See all articles