JavaScriptで実用的な生APIのまとめ

5081 ワード

本題に入る
解析文字列オブジェクト
JavaScriptの対象はJSONに順番に並べられ、JSONも対象に解析できますが、問題はJSONでも対象でもない「もの」ができたら、どちらに回しても不便です.evalは役に立ちます.

var obj = "{a:1,b:2}";  //           
eval("("+ obj +")")   // {a: 1, b: 2}
evalは文字列表現を実行できるので、objという文字列オブジェクトを本物のオブジェクトに実行したいです.evalを使う必要があります.しかし、evalを回避するために{}付きのobjを文として実行するために、私達はobjの外で正しい()をセットして、それを表現式に解析させます.
&(位と)
一つの数が2のn乗かどうかを判断します.これを自身と相乗させてもいいです.

var number = 4
(number & number -1) === 0 // true
^(ビット別)
第3の変数を変えたら、2つの変数の値を交換できます.

var a = 4,b = 3
a = a ^ b //  7
b = a ^ b //  4
a = b ^ a //  3
フォーマットDate
フォーマット後の時間がほしいですか?今はもうゲットしなくてもいいです.年月日の分秒、三歩で解決します.

var temp = new Date();
var regex = /\//g;
(temp.toLocaleDateString() + ' ' + temp.toLocaleTimeString().slice(2)).replace(regex,'-');

// "2015-5-7 9:04:10"

フォーマット後の時間を時間の対象に変えたいですか?直接Dateの構造関数を使う

new Date("2015-5-7 9:04:10");

// Thu May 07 2015 09:04:10 GMT+0800 (CST)

標準的な時間オブジェクトをunixタイムスタンプに変換しますか?valueOfで解決しました

(new Date).valueOf();

// 1431004132641

多くの友達がこのようにタイムスタンプが早くもらえるように注意しました.
+new Date
一元プラス
一元加算は文字列の数字を数学数字に素早く変換できます.

var number = "23" 
typeof number // string
typeof +number // number
時間の対象をタイムスタンプに変えることができます.

new Date // Tue May 12 2015 22:21:33 GMT+0800 (CST)
+new Date // 1431440459887
意味を変えるURI
urlをパラメータとしてルートで渡す必要があります.

var url = encodeURIComponent('http://segmentfault.com/questions/newest')

// "http%3A%2F%2Fsegmentfault.com%2Fquestions%2Fnewest"

再逆転の意味

decodeURIComponent(url)
// "http://segmentfault.com/questions/newest"


Number
小数点以下の数桁の小数を残したいです.文字列の切り取りをしなくてもいいです.toFixedは持って行きます.

number.toFixed()   // "12346"
number.toFixed(3)  // "12345.679"
number.toFixed(6)  // "12345.678900"
パラメータの範囲は0~20で、デフォルト0は書きません.
タイプ検出
typeofは最も頻繁なタイプの検出手段を使用しています.

typeof 3    // "number"
typeof "333"  // "string"
typeof false  // "boolean"

基本的にはデータのタイプがいいですが、データのタイプを引用すると、あまり使いにくくなります.

typeof new Date()  // "object"
typeof []      // "object"
typeof {}      // "object"
typeof null     // "object"   

前の三つはまだ我慢できます.nullもobjectに戻ります.冗談ですか?(ps:実はこれはJavaScriptのbug人で、なかなか分解しないです.◡・輯꒱)
この時、私達はinstance ofを使います.

toString instanceof Function
// true
(new Date) instanceof Date
// true
[] instanceof Object
// true
[] instanceof Array
// true

実は私達は[]とObjectがtrueを得ました.知っていますが、[]も対象です.でも、タイプをより正確に判断できる方法を望んでいます.今はObject.prototype.toString()を使って判断してきました.私たちはFuntions.prototype.callまたはFuntion.prototype.appyの形式で呼び出す必要があります.

var toString = Object.prototype.toString;

toString.call(new Date)  // "[object Date]"
toString.call(new Array)  // "[object Array]"
toString.call(new Object) // "[object Object]"
toString.call(new Number) // "[object Number]"
toString.call(new String) // "[object String]"
toString.call(new Boolean) // "[object Boolean]"

注意したいのは、toString方法は書き換えられかねないので、必要な場合はObject.prototype.toString()をそのまま使うことができます.
継承を実現する
公式のあげた例を見ます.

//Shape - superclass
function Shape() {
 this.x = 0;
 this.y = 0;
}

Shape.prototype.move = function(x, y) {
  this.x += x;
  this.y += y;
  console.info("Shape moved.");
};

// Rectangle - subclass
function Rectangle() {
 Shape.call(this); //call super constructor.
}

Rectangle.prototype = Object.create(Shape.prototype);

var rect = new Rectangle();

rect instanceof Rectangle //true.
rect instanceof Shape //true.

rect.move(1, 1); //Outputs, "Shape moved."

callにより初期化の属性と方法を取得し、Object.createにより原型オブジェクト上の属性と方法を取得する.
反復
ES 5はmap、filter、some、every、reduceなどの反復関数が多く出ています.
Aray
具体的なアプリはここで詳しく紹介しています.https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Glob... join、pop、push、reverse、shift、sort、splice、unshiftは元の配列を変えます.
concat、indexOf、lastIndexOf、slice、toStringは元の配列を変えません.
map、filter、some、every、reduce、forEachという反復方法は元の配列を変えません.
いくつかの注意点:
1 shiftでは、popは削除された要素2 spliceを返します.または、空の配列3 pushのために新しい配列長4 someを返します.trueがあるときに5 evryを停止します.falseがあるときに6以上の反復方法を停止します.最後に一つのパラメータthisArgを追加します.これはcalbackを実行する時のthis値です.
以上述べましたが、本文の内容は全部です.お好きになってください.