JavaScript初心者の注意すべき7つの詳細

16259 ワード

原文はここです
1.コードの簡略化
//    
var car = new Object();
var.color='red';
car.wheels=4;
car.hubcaps='spinning';
car.age=4;
//      
var car={
        color:'red',
        wheels:4,
        hubcaps:'spinning',
        age:4
    }
これは最も基本的なものです.もちろんプロトタイプとコンストラクションモードを結合した定義方法があります.
//  
var a=new Array(
'aa','bb','cc'
);

//  :
var a=[
    'aa','bb','cc'
];
//    
var car= new Array();
car['color']='red';
car['wheels']=4;
car['hubcaps']='spinning';
car['age']=4;

var direction;
if(x <200){
    direction=1;
}else{
    direction=-1;
}

//  :       
var direction = x <200 ?1 : -1;
(2)データフォーマットとしてJSONを使用する
Duglas Crockfordは、JSONデータフォーマットを発明してデータを保存しています.オリジナルのjavascript方法を使用して、複雑なデータを保存してもいいです.
var band = { "name":"The Red Hot Chili Peppers", "members":[ { "name":"Anthony Kiedis", "role":"lead vocals" }, { "name":"Michael 'Flea' Balzary", "role":"bass guitar, trumpet, backing vocals" }, { "name":"Chad Smith", "role":"drums,percussion" }, { "name":"John Frusciante", "role":"Lead Guitar" } ], "year":"2009" }
私たちはJavaScriptでJSONを直接使用してもいいし、APIとして戻ってくるフォーマットもあります.多くのAPIで応用されています.
<div id="delicious"></div>
<script> function delicious(o){ var out='<ul>'; for(var i=0;i<o.length;i++){ out+='<li><a href="'+o[i].u + '">' + o[i].d + '</a></li>'; } out +='</ul>'; document.getElementById('delicious').innerHTML = out; } </script>
<script> src="http://feeds.delicious.com/v2/json/codepo8/javascript?count=15&callback=delicious"></script>
ここでは、deliciousのWebサービスを呼び出して最新のブックマークを取得し、JSON形式で戻り、それらを無秩序リストとして表示する.
本質的には、JSONは、複雑なデータを記述するための最も軽量な方法であり、直接ブラウザで実行される.PHPでもJson_を呼び出すことができます.decode()関数はそれを使います.
(3)できるだけJavaScript原生関数を使用する
//          :
//        
var numbers=[3,342,23,22,124];
var max=0;
for(var i=0;i<numbers.length;i++){
    if(numbers[i] > max){
        max = numbers[i];
    }
}
alert(max);

//   
var numbers = [3,342,23,22,124];
number.sort(function(a,b){
    return b-a;
    });
alert(numbers[0]);

//   :
Math.max(12,123,3,2,433,4);//return 433
//     class  ,     :
function addClass(elm,newClass){
    var c=elm.className;
    elm.className = (c==='')? newClass : c+' ' +newClass;
}

//      :
function addClass(elm,newClass){
    car classes = elm.className.split(' ');
    classes.push(newClass);
    elm.className = classes.join(' ');
}
(4)事件依頼(読めませんでした)
イベントはJavaScriptの非常に重要な一部です.リストのリンクをクリックしたいですが、一般的にはループを書いて、リンク先にイベントを結びつけます.HTMLコードは以下の通りです.
<h2>Great Web resources</h2>
<ul id="resources">
  <li><a href="http://opera.com/wsc">Opera Web Standards Curriculum</a></li>
  <li><a href="http://sitepoint.com">Sitepoint</a></li>
  <li><a href="http://alistapart.com">A List Apart</a></li>
  <li><a href="http://yuiblog.com">YUI Blog</a></li>
  <li><a href="http://blameitonthevoices.com">Blame it on the voices</a></li>
  <li><a href="http://oddlyspecific.com">Oddly specific</a></li>
</ul>
スクリプトは以下の通りです
(function(){ var resources = document.getElementById("resources"); var links = resources.getElementsByTagName("a"); var all = links.length; for(var i=0; i < all ; i++){ links[i].addEventListener('click',handle,false); }; function handler(e){ var x=e.target; alert(x); e.preventDefault(); }; })();
より合理的な書き方は、リストの親オブジェクトのみにイベントをバインドします.
(function(){ var resources = document.getElementById("resources"); resoucres.addEventLister('click',handler,false); function handler(e){ var x = e.target; if(x.nodeName.toLowerCase() === 'a'){ alert('Event delegation:' + x); e.preventDefault(); } } })
();
(5)匿名関数
JavaScriptに関する最も頭が痛いことの一つは、変数が特定の作用範囲を持っていないことです.一般的には、任意の変数、関数、配列またはオブジェクトが大域的であり、これは、同じページ上の他のスクリプトがアクセスし、それらをカバーすることができることを意味する.解决方法は、匿名関数に変数をカプセル化することです.例えば、以下の定義では、3つのグローバル変数と2つのグローバル関数が生成されます.
var name = 'Chris';
var age = '34';
var status = 'single';
function createMember(){
  // [...]
}
function getMemberDetails(){
  // [...]
}
パッケージ後は以下の通りです
var myApplication = function(){
    var name = 'Chris';
    var age = 34;
    var status = 'single';
    return{
        createMember:function(){
            //[...]
        },
        getMemberDetails:function(){
        //[...]
        }
    }
}();
//myApplication.createMember() 
// and
//myApplication.getMemberDetails() 
//now work
これは単体モードと呼ばれ、JavaScriptの設計モードの一つであり、YUIの中では非常に多く使われている.改善された書き方は:
var myApplication = function(){
    var name = 'Chris';
    var age = 34;
    var status = 'single';
    function createMember(){
        //[...]
    }
    function getMemberDetails(){
        //[...]
    }
    return{
        create:createMember,
        get:getMemberDetails
    }
}();
//myApplication.get() and myApplication.create() now work
(6)コードの設定可能
あなたが書いたコードを他の人が使いやすいようにしたり、修正したりするためには、設定が必要です.ソリューションはあなたが書いたスクリプトに設定対象を追加します.要点は以下の通りです
1、あなたのシナリオにconfigrationというオブジェクトが追加されます.
2、配置オブジェクトには、すべての他の人が変えたいもの、例えばCSSのID、クラス名、言語などが格納されています.
3、このオブジェクトを返します.パブリック属性として他の人が書き換えることができます.
(7)コード互換性
互換性は初心者が見逃しやすい部分です.Javascriptを勉強する時はいつもある固定ブラウザでテストします.このブラウザはIEである可能性があります.これは致命的なものです.最終的にユーザーが見た結果、あなたが書いたコードはブラウザで正しく実行できないかもしれません.あなたのコードを主流のブラウザで全部テストするべきです.時間がかかるかもしれませんが、そうするべきです.