『起きられないNode.js』要約JavaScripts概要(3)

3842 ワード

V 8のJavaScript
Chromeブラウザのリリースに伴い、新しいJavaScriptエンジンV 8が提供され、非常に速いスピードで実行され、最新のECMAScript特性を常に維持し、サポートする利点があり、ブラウザで重要な位置を迅速に占めています.言語そのものの不足を補う特性もある.もう1つの特性の導入は、jQuery/PrototypeJSのようなフロントエンドクラスライブラリのおかげで、非常に実用的な拡張とツールを提供しています.
Object Keys
オブジェクトのキー(aとc)を取得するには、次の手順に従います.
var a = {a:'b', c : 'd'}
for(var i in a){}

キーを反復することで、配列に収集できます.ただし、以下のように拡張しすぎると
Object.prototype.c = 'd'

反復中にc属性を取得しないようにhasOwnProptertyでチェックできます.
for(var i in a){
  if(a.hasOwnPropterty(i){}
}

あるいは以下の方法で検査する
var a  = {a:'b', c : 'd'}
Object.keys(a);  // ['a', 'c']

Array.isArray
配列にtypeofオペレータを使用するとobjectが返されます.次に、ほとんどの場合、データが本当に配列であるかどうかを確認します.Array.isArrayは配列に対してtrueを返し、そうでなければfalseを返します.
Array.isArray(new Array()) // true
Array.isArray([]) // true
Array.isArray(null) // false
Array.isArray(arguments) // false

配列メソッド
配列を巡回するには、forEach(jQueryの$.eachのような)を使用します.
//    1,2,3
[1,2,3].forEach(function(v){console.log(v)})

エレメントをフィルタするにはfilter(jQueryの$.grepのように)を使用します.
//   [1,2]
[1,2,3].filter(function(v){return v < 3})

値を変更するにはmap(jQueryの$.mapのように)を使用します.
//   [2,4,6]
[1,2,3].map(function(v){return v * 2})

V 8は配列に対していくつかの方法を提供した.
文字列メソッド
文字列の先頭と末尾のスペースを除去するにはtrimを使用します.
' hello   '.trim() // 'hello'
'i am a boy'.trim() // i am a boy          

JSON
V 8はJSONを提供する.stringifyとJSONparseメソッドはJSONデータを復号・符号化する.JSONは、JavaScriptオブジェクトの文字数に近い符号化規格であり、WEBサーバやAPIサービスの大部分に使用されています.
var obj = JSON.parse({'a':'b'})
obj.a == 'b' // true

function.bind
.bind(jQueryの$.proxyに類似)はthisへの参照を変更できます.
function a(){
  this.hello == 'world'  //true
};
var b = a.bind({hello:'world'})
b() //  call apply  ,bin      ,      b()

function.name
V 8はまた、非標準の関数属性名をサポートする.
var a = function woot() {};
a.name == 'woot' // true

この属性はV 8内部のスタックトラッキングに属する.エラーが投げ出されると、V 8はスタックの追跡情報を表示し、どの関数呼び出しがエラーの発生を招いたかを教えます.
var woot = function() {throw new Error()}
woot()

上記の例では、v 8は関数参照に名前を割り当てることができない.しかし、関数に名前を付けると、V 8はスタックを表示するときに情報を追跡するときに名前を表示することができる.
var woot = function buggy(){throw new Error()}
woot()
Error
    at buggly (repl:1:37)

関数のフルネームはデバッグに役立ちますので、常に関数のフルネームを推奨します.実測したx以降wootは関数名
proto
____proto____継承チェーンの定義を容易にするには、次のようにします.
function Animal(){}
function Ferret() {}
Ferret.prototype.__proto__ = Animal.prototype

従来のように中間構造器を借りる必要はありません
アクセス装置
メソッドを呼び出してプロパティを定義できます.アクセスプロパティは___を使用します.defineGetter____属性使用の設定_defineSetter____ たとえば、Dataオブジェクトのプロパティを定義し、自然言語で記述された日付間隔を返します.例えば、3秒前に発生するのは具体的な日付より分かりやすい
//
Date.prototype.__defineGetter__('ago', function(){
  var diff = (((new Date())).getTime() - this.getTime()) / 1000),
  day_diff = Math.floor(diff / 86400)
return day_diff == 0 && (diff < 60 && 'just now' || diff < 120 && '1 minute ago' ||
  diff < 3600 && Math.floor(diff / 60) + 'minute ago' ||
  diff < 7200 && '1 hour ago' ||
  diff < 86400 && Math.floor(diff / 3600) + 'hours ago' ||
  day_diff == 1 && 'Yesterday' ||
  day_diff < 7 && day_diff + 'day ago' ||
  Math.ceil(day_diff / 7) + 'weeks ago'
})

その後、agoプロパティに簡単にアクセスすればいいです.アクセスプロパティは、実際には定義された関数も呼び出されますが、このプロシージャは透明です.
var a = new Date('12/12/1990')
a.ago