JavaScript引用タイプ——「単体内蔵対象」の注意点

4170 ワード

単体内蔵オブジェクト
単体でオブジェクトを内蔵するということは、開発者が内蔵するオブジェクトを明示的に実例化する必要がないということです.前の章では、多くの内蔵オブジェクトについて議論しましたが、ECMA-262は、2つの単体内蔵オブジェクトを定義しました.GlobalとMathです.
Globalオブジェクト
グローバルスコープで定義されている属性と関数は全てGlobalオブジェクトの属性です.
URIコード方法encodeURI()encodeURIComponent()decodeURI()decodeURIComponent()方法.以下のとおりです
var uri = "http://www.bai du.com";
console.log(encodeURI(uri));
console.log(encodeURIComponent(uri));

/*
[Log] http://www.bai%20du.com (repetition.html, line 16)
[Log] http%3A%2F%2Fwww.bai%20du.com (repetition.html, line 17)
*/

var uri = "http%3A%2F%2Fwww.bai%20du.com";
console.log(decodeURI(uri));
console.log(decodeURIComponent(uri));    
/*
[Log] http%3A%2F%2Fwww.bai du.com (repetition.html, line 16)
[Log] http://www.bai du.com (repetition.html, line 17)
*/
evalメソッド(コード注入を防止し、慎重に使用するべき)
この方法は完全な解析器であり、一つのパラメータ、すなわち実行するECMAScript文字列だけを受け入れる.実行されるコードは、実行環境と同じ作用ドメインチェーンを有する.これは、eval()実行されたコードによって、環境で定義された変数を参照することができ、この方法で作成された任意の変数や関数は向上しないことを意味する.例えば:
eval("function hi(){console.log('hi')}");
hi();

var num = 100;
eval("document.write(num);");

eval("var num = 110;");
document.write(num);
慎重に使う!特に彼はユーザーデータの入力を実行する場合、結果は非常に深刻かもしれません.
Globalオブジェクトの属性
以下のページにGlobalオブジェクトのすべての属性が表示されます.JavaScript Globalオブジェクト
Windowオブジェクト(後で詳しく検討します)
EFMAScriptはGlobalオブジェクトに直接アクセスする方法を示していませんが、Webブラウザはこのグローバルオブジェクトをwindowオブジェクトの一部として実現しています.したがって、グローバルスコープで宣言されたすべての変数と関数は、windowオブジェクトの属性となります.例えば:
var color = "red";
var func = function(){
    document.write("func function");
};

console.log(window.color); //red
window.func(); //func function
すぐに呼び出す関数式を作成します.
var global = function(){
    document.write("func")
}();

(
    function(){
        document.write("func")
    }
)();
上下両方ともいいです.詳細は後で関数式を議論します.
Mathオブジェクト
ECMAScriptはまた、数学式と情報を保存するために、Mathオブジェクトという共通の位置を提供しています.
Mathオブジェクトの属性
主に:
  • Math.E(自然対数の基数、すなわちeの値)
  • Math.LN 10(10の自然対数)
  • Math.LN 2(2の自然対数)
  • Math.LOG 2 E(2を底にeの対数)
  • Math.LOG 10 E(10を底にeの対数)
  • Math.PI(πの値)
  • Math.SQRT 1_2(1/2の平方根である2の平方根の逆数)
  • Math.SQRT 2(2の平方根)
  • min()max()方法
    この2つの方法は,一組の数値の最小値と最大値を決定するのに非常に有用である.両方の方法は任意の複数の数値を受信することができる.例えば:
    
    var maxValue = Math.max(321,3,1);
    console.log(maxValue); //321
    
    配列内の最大値または最小値はどうやって抽出されますか?
    var valuesArray = [32,13,214,32,5432,1];
    var maxValue = Math.max.apply(this,valuesArray);
    document.write(maxValue); //5432
    
    使用apply()方法は、簡単にthis値を変えることができます.任意の配列席の第二パラメータを指定できます.
    また、
    var valuesArray = [1,321,21,3,3];
    function sum(){
        console.log(arguments.length);
        var max = Math.max.apply(this,arguments);
        console.log(max);
    }
    sum.apply(this,valuesArray);
    
    丸め方法Math.ceil()Math.floor()Math.round()3つの方法はそれぞれ以下の規則に従う.
  • Math.ceeir(上へ丸める)
  • Math.round(標準切り捨て-四捨五入)
  • Math.flor()(下に切り捨て)
  • random()方法Math.random()方法は0が1より大きい乱数を返します.例えば:
    console.log(Math.random());
    
    ある整数範囲でランダムに数値を選択できます.
      = Math.floor(Math.random() *         +        );
    
    例えば、ランダムに1から10までの乱数を選択すると、次のように書きます.
    var num = Math.floor(Math.random() * 10 + 1);
    
    ランダムに2~4の間の乱数を選択したい場合は、次のように書くことができます.
    var num = Math.floor(Math.random() * 3 + 2);
    
    一つの関数によって乱数が自動的に生成され、可能な値の範囲を計算する必要がない.例えば:
    function selectFrom(lowerValue,upperValue){
        return Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue);
    }
    
    上記の関数により,Arayの数値にランダムにアクセスできる.例えば:
    var valuesArray = ["BMW","Audi","Benz"];
    
    function selectFrom(lowerValue,upperValue){
        return Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue);
    }
    
    var selectValue = valuesArray[selectFrom(0,valuesArray.length - 1)];
    console.log(selectValue);
    
    その他の方法
    JavaScript Mathオブジェクトを参照してください.