ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptのデータ型は何ですか? jsデータ型の概要

JavaScriptのデータ型は何ですか? jsデータ型の概要

不言
不言転載
2018-10-19 15:03:142878ブラウズ

この記事では、JavaScript のデータ型とは何なのかについて説明します。 js データ型の紹介には一定の参考価値があります。必要な方は参考にしていただければ幸いです。

1. JavaScript には何種類の値がありますか?

JavaScript には、基本データ型と参照データ型の 2 つのデータ型があります。基本的なデータ型には、未定義、Null、ブール、数値、文字列、記号が含まれます。 (ES6 で新たに追加、一意の値を表す) および参照データ型は総称して Object オブジェクトと呼ばれ、主にオブジェクト、配列、関数が含まれます。次に、両者の特徴をそれぞれ見ていきましょう。

2. 基本データ型

1. 値は不変です

var name = 'java';
name.toUpperCase(); // 输出 'JAVA'
console.log(name); // 输出  'java'

基本データ型の値は不変であると結論付けることができます。 's

2. スタック領域に格納される

元のデータ型は、小さなスペースを占有し、固定サイズになることがよくあります。データは使用されるため、スタックに格納されます。

3. 値の比較

var a = 1;
var b = true;
console.log(a == b);    // true
console.log(a === b);   // false

==:値の比較のみを行い、データ型の変換を行います。
===: 値を比較するだけでなく、データ型も比較します。

3. 参照データ型

1. 値は変数です

var a={age:20};
a.age=21;
console.log(a.age)//21

上記のコードは、参照型がプロパティとメソッドを持つことができることを示しています。は動的に変更できます。

2. スタックメモリとヒープメモリに同時に保存

参照データ型は、占有容量が大きくサイズが固定されていないヒープ(heap)に保存されます。スタックに格納されると、プログラムのパフォーマンスに影響します。参照データ型は、ヒープ内のエンティティの開始アドレスを指すポインターをスタックに格納します。インタプリタが参照値を探すとき、まずスタック上のアドレスを取得し、次にヒープからエンティティを取得します。

JavaScriptのデータ型は何ですか? jsデータ型の概要

#3. 比較は参照比較です。

ある変数から別の変数に参照型の値を代入する場合も同様です。変数に格納されているオブジェクトの値を、新しい変数に割り当てられたスペースにコピーします。

var a={age:20};
var b=a;
b.age=21;
console.log(a.age==b.age)//true
基本型と参照型はメモリ内の異なる場所に格納されると述べましたが、参照型はヒープに格納されるオブジェクトであると同時に、ポインタがスタックに格納されます。ポインタはオブジェクト内のエンティティの開始位置を指します。変数 a が初期化されると、ポインタ a はオブジェクト {age:20} のアドレスを指します。a が b に代入されると、b はオブジェクト {age:20} のアドレスを指します。これら 2 つの変数は同じオブジェクトを指します。したがって、これらの変数のいずれかを変更すると、相互に影響します。

JavaScriptのデータ型は何ですか? jsデータ型の概要#現時点では、変数が元のオブジェクトを参照している場合、他の変数には影響しません。

var a={age:20};
var b=a;
a = 1;
b // {age:20}

上記のコードでは、a と b は同じオブジェクトを指し、その後 a の値は 1 に変わります。これは b には影響せず、b は引き続き元のオブジェクトを指します。

4. データ型を確認します。

1.typeof

typeof は、データ型を表す文字列を返します。数値、ブール値が含まれます。 , データ型は文字列、シンボル、オブジェクト、未定義、関数の7種類ありますが、null、配列などは判定できません。

typeof Symbol(); // symbol 有效
typeof ''; // string 有效
typeof 1; // number 有效
typeof true; //boolean 有效
typeof undefined; //undefined 有效
typeof new Function(); // function 有效
typeof null; //object 无效
typeof [] ; //object 无效
typeof new Date(); //object 无效
typeof new RegExp(); //object 无效

この場合、配列やオブジェクトはオブジェクトを返す必要があります。判断するには、instanceof を使用します

2.instanceof

instanceof は、A が B のインスタンスであるかどうかを判断するために使用されます。式は次のとおりです: Ainstanceof B。A が B のインスタンスの場合、戻り値true、それ以外の場合は false を返します。 instanceof 演算子は、オブジェクトのプロトタイプ チェーンにコンストラクターのプロトタイプ プロパティがあるかどうかをテストするために使用されます。

[] instanceof Array; //true
{} instanceof Object;//true
new Date() instanceof Date;//true
new RegExp() instanceof RegExp//true

配列の型判定に関しては、ES6 を使用して

Array.isArray()

Array.isArray([]);   // true
instanceof を追加することもできます。 3 つの大きな欠点:

基本的なデータ型に関しては、リテラルによって作成された結果とインスタンスによって作成された結果の間には特定の違いがあります。

console.log(1 instanceof Number)//false
console.log(new Number(1) instanceof Number)//true

厳密に言えば、インスタンスによって作成された結果のみが標準のオブジェクト データ型値です。標準の Number クラスのインスタンス。リテラル メソッドによって作成された結果は、厳密なインスタンスではなく基本的なデータ型の値ですが、JS の緩やかな特性により、Number.prototype で提供されるメソッドを使用できます。

それが現在のインスタンスのプロトタイプ チェーン上にある限り、それを使用して検出される結果はすべて true です。クラスのプロトタイプ継承では、検出される最終結果は正確ではない可能性があります。

var arr = [1, 2, 3];
console.log(arr instanceof Array) // true
console.log(arr instanceof Object);  // true
function fn(){}
console.log(fn instanceof Function)// true
console.log(fn instanceof Object)// true

ヌルと未定義を検出できません

特別なデータ型のヌルと未定義の場合、それらのクラスはヌルと未定義ですが、ブラウザはこれら 2 つのクラスを保護し、許可しません。外部訪問。

JavaScriptのデータ型は何ですか? jsデータ型の概要3. 厳密な演算子 ===

只能用于判断null和undefined,因为这两种类型的值都是唯一的。

var a = null
typeof a // "object"
a === null // true

undefined 还可以用typeof来判断

var b = undefined;
typeof b === "undefined" // true
b === undefined // true

4.constructor

constructor作用和instanceof非常相似。但constructor检测 Object与instanceof不一样,还可以处理基本数据类型的检测。

var aa=[1,2];
console.log(aa.constructor===Array);//true
console.log(aa.constructor===RegExp);//false
console.log((1).constructor===Number);//true
var reg=/^$/;
console.log(reg.constructor===RegExp);//true
console.log(reg.constructor===Object);//false

constructor 两大弊端:

null 和 undefined 是无效的对象,因此是不会有 constructor 存在的,这两种类型的数据需要通过其他方式来判断。

函数的 constructor 是不稳定的,这个主要体现在把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor给覆盖了,这样检测出来的结果就是不准确的

function Fn(){}
Fn.prototype = new Array()
var f = new Fn
console.log(f.constructor)//Array

5.Object.prototype.toString.call()

Object.prototype.toString.call() 最准确最常用的方式。首先获取Object原型上的toString方法,让方法执行,让toString方法中的this指向第一个参数的值。

关于toString重要补充说明:

本意是转换为字符串,但是某些toString方法不仅仅是转换为字符串

对于Number、String,Boolean,Array,RegExp、Date、Function原型上的toString方法都是把当前的数据类型转换为字符串的类型(它们的作用仅仅是用来转换为字符串的)

Object上的toString并不是用来转换为字符串的。

Object上的toString它的作用是返回当前方法执行的主体(方法中的this)所属类的详细信息即"[object Object]",其中第一个object代表当前实例是对象数据类型的(这个是固定死的),第二个Object代表的是this所属的类是Object。

Object.prototype.toString.call('') ;   // [object String]
Object.prototype.toString.call(1) ;    // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; //[object global] window是全局对象global的引用


以上がJavaScriptのデータ型は何ですか? jsデータ型の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。