ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript タイプの基本データ型とパッケージ化タイプ system_javascript スキル

JavaScript タイプの基本データ型とパッケージ化タイプ system_javascript スキル

WBOY
WBOYオリジナル
2016-05-16 15:21:421517ブラウズ

前に書いてあります

JavaScript のデータ型は、プリミティブ型と参照型の 2 つの型に分類できます

プリミティブ型は、固定領域を占有し、単純なデータセグメントであるため、変数クエリの速度を向上させるためにスタックに格納されます (値によってアクセスされます)。その中で、JavaScript の基本的なデータ型には、Unknown、Null、Boolean、Number、String が含まれます

参照型の値はサイズが変化するためスタックに格納できず、変数クエリの速度が低下するため、値はヒープ(heap)に格納されます。変数は、オブジェクトが格納されているメモリ位置を指すポインタです (アドレスによるアクセス)

[注] 参照型の値の場合、属性やメソッドの追加、変更や削除も可能ですが、基本型の場合は属性やメソッドを追加できません。

未定義

未定義型には、未定義の値が 1 つだけあります。宣言された変数が初期化されていない場合、変数のデフォルト値は未定義です


var test;//undefined
console.log(test == undefined);//true
var test = undefined;//undefined 
まだ宣言されていない変数に対して実行できる操作は 1 つだけです。typeof 演算子を使用してデータ型を検出しますが、厳密モードではエラーが発生します。


typeof(test);//未定義

シーンが表示されます

[1]宣言された未代入変数


[2] オブジェクトの存在しない属性を取得します


[3]戻り値のない関数の実行結果


[4]関数のパラメータは渡されません


[5]void(式)


型変換

  Boolean(undefined):  false
  Number(undefined):  NaN
  String(undefined):  'undefined'

ヌル

Null 型には、null という値が 1 つだけあります。論理的な観点から見ると、null 値は null オブジェクト ポインターを表します。定義された変数を使用してオブジェクトを保存する場合は、変数を null に初期化するのが最善です。実際、未定義の値は null 値から派生するため、 unknown == null

となります。

[注] null は null オブジェクト ポインタ、[] は空の配列、{} は空のオブジェクト、これら 3 つは異なります

console.log(null == undefined);//true 

シーンが表示されます

オブジェクトが存在しない場合


型変換

ブール値(null): false

数値(null): 0
文字列(null): 'null'

[注意] unfineed と null はコンストラクター型ではないため、カスタム プロパティを追加することはできません

梱包タイプ

ラッピング型は特別な参照型です。基本型の値が読み取られるたびに、対応する基本ラッパー型のオブジェクトがバックグラウンドで作成され、データを操作するためにいくつかのメソッドが呼び出される場合があります。パッケージ化タイプは 3 つあります: ブール値、数値、文字列

var s1 = 'some text';
var s2 = s1.substring(2);
//在上述过程中,实际上发生了三个步骤
var s1 = new String('some text'); //(1)创建String类型的一个实例 
var s2 = s1.substring(2); //(2)在实例上调用指定的方法
s1 = null; //(3)销毁这个实例 
[注意] 参照型と基本ラッパー型の主な違いは、オブジェクトの有効期間です。 new 演算子を使用して作成された参照型のインスタンスは、実行フローが現在のスコープを離れるまでメモリ内に残ります。自動的に作成される基本的なパッケージング タイプのオブジェクトは、コード行が実行される時点でのみ存在し、その後すぐに破棄されます。これは、実行時にプリミティブ型の値に対してプロパティとメソッドを追加できないことを意味します


var s1 = 'some text';
s1.color = 'red';
alert(s1.color);//undefined 

作成方法

パッケージング タイプを明示的に作成するには 2 つの方法があります:


[1] オブジェクトメソッド [非推奨]


var s = new Object('abc');
var b = new Object(true);
var n = new Object(123); 
[2] コンストラクターメソッド [非推奨]


var s = new String('abc');
var b = new Boolean(true);
var n = new Number(123); 
[注意] new を使用して基本パッケージ化タイプのコンストラクターを呼び出すことは、同じ名前の変換関数を直接呼び出すこととは異なります


var value = '25';
var number = Number(value);
console.log(typeof number);//number
var obj = new Number(value);
console.log(typeof obj);//object 

Boolean

  Boolean类型只有两个值:true 和 false。Boolean包装类型是与布尔值对应的引用类型,在布尔表达式中使用Boolean对象容易造成误解

出现场景

  [1]条件语句导致系统执行的隐士类型转换

  [2]字面量或变量定义

类型转换

  Number(true): 1     ||   Number(false) : 0
  String(true):'true'     ||   String(false):'false'

Boolean()

  Boolean(undefined):false
    Boolean(null):false

  Boolean(非空对象包括空数组[]和空对象{}):true

  Boolean(非0): true || Boolean(0和NaN):false

  Boolean(非空包括空格字符串):true || Boolean(''):false

  [注意]true不一定等于1,false也不一定等于0

包装类型继承的方法

  valueOf():返回基本类型值true 或 false

  toString()和toLocaleString():返回字符串'true' 或'false'

console.log(typeof true.valueOf(),true.valueOf());//boolean true
console.log(typeof false.valueOf(),false.valueOf());//boolean false
console.log(typeof true.toString(),true.toString());//String 'true'
console.log(typeof false.toString(),false.toString());//String 'false'
console.log(typeof true.toLocaleString(),true.toLocaleString());//String 'true'
console.log(typeof false.toLocaleString(),false.toLocaleString());//String 'false' 

Number

  javascript只有一种数字类型,既可以表示32位的整数,还可以表示64位的浮点数

  关于Number类型的详细信息移步到此

String

  String类型是javascript中唯一没有固定大小的原始类型

下面接着来理解下JavaScript基本数据类型的包装对象

现象:为什么可以对字符串的操作采用对象的表示法?

例如:          

var s    = "this is a String";
      var len   = s.length; 

解析:

JavaScript三个基本数据类型都有相应的对象类;分别为Sring,Number,Boolean类;
JavaScript可以灵活的将一种类型的值转换为另一种类型;
当我们在对象环境中使用字符串时,即当我们试图访问这个字符串的属性或方法时;
JavaScript会为这个字符串值内部地创建一个String包装对象;
String对象会暂时代替原始的字符串值,完成我们的访问;
这个被内部创建的String对象是瞬间存在的,它的作用是使我们可以正常访问属性和方法;
String对象在使用过后会被系统丢弃掉;
而原始值并不会被改变;

    以上同样适用于数字和布尔值类型;

    使用Object()函数,任何数字、字符串、布尔值都可以转换为它对应的包装对象;

    例如:

var number_wrapper  = Object (3);
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。