js:標準対象/包装対象

2793 ワード

一、JavaScriptの世界では、すべてが対象です.
しかし、あるオブジェクトは他のオブジェクトとは違っています.オブジェクトの種類を区別するために、typeofオペレータでオブジェクトの種類を取得します.常に文字列を返します.
typeof 123; // 'number'
typeof NaN; // 'number'
typeof 'str'; // 'string'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof Math.abs; // 'function'
typeof null; // 'object'
typeof []; // 'object'
typeof {}; // 'object'
number、string、bollan、functionとundefinedは他のタイプとは違っています.【特に注意】nullのタイプはobjectであり、Arayのタイプもobjectであり、typeofを使えばnull、Arayと通常の意味でのobjectを区別できなくなります.
二、包装対象
これらのタイプ以外にも、JavaScriptは包装対象を提供しています.Javaをよく知っている仲間はきっとintとIntegerという曖昧な関係をよく知っています.
number、bootleanとstringは包装対象があります.
★JavaScriptでは、文字列も区別します.stringタイプとその包装タイプ.
包装対象用new作成:
var n = new Number(123); // 123,         
var b = new Boolean(true); // true,         
var s = new String('str'); // 'str',         
★包装対象が元の値とそっくりに見えますが、彼らのタイプはすでにobjectに変わりました.したがって、包装の対象と元の値は==比較的にfalseに戻ります.
typeof new Number(123); // 'object'
new Number(123) === 123; // false

typeof new Boolean(true); // 'object'
new Boolean(true) === true; // false

typeof new String('str'); // 'object'
new String('str') === 'str'; // false
包装対象は絶対に使わないでください.特にstringタイプに向けて!!!
Number、Boolean、Stringを使っていますが、newを書かなかったらどうなりますか?
このとき、Number()、Boolean、String()は一般関数として扱い、どのタイプのデータをnumber、bollan、stringタイプに変換します.
var n = Number('123'); // 123,   parseInt() parseFloat()
typeof n; // 'number'

var b = Boolean('true'); // true
typeof b; // 'boolean'

var b2 = Boolean('false'); // true! 'false'        true!         !
var b3 = Boolean(''); // false

var s = String(123.45); // '123.45'
typeof s; // 'string'

★★★まとめてみると、このようないくつかの規則があります.
   1.     new Number()、new Boolean()、new String()      ;

   2.  parseInt() parseFloat()        number;

   3.  String()        string,           toString()  ;

   4.             boolean   ,       if (myVar) {...};

    5.typeof        number、boolean、string、function undefined;

    6.  Array   Array.isArray(arr);

    7.  null   myVar === null;

    8.             typeof window.myVar === 'undefined';

    9.               typeof myVar === 'undefined'。
その他の注意事項:
1.どのオブジェクトにもToString()の方法がありますか?いいえ!nullとundefinedはありません!確かにこの二つの特殊な値は除外します.nullはまたobjectタイプを装っています.
2.もっと注意深いクラスメートは、number対象がtoString()SyntxErrorを呼び出すと指摘しています.
123.toString(); // SyntaxError
このような場合は、特別に処理します.
123..toString(); // '123',       !
(123).toString(); // '123'