ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript の奇妙な動作 配列_JavaScript のヒント

JavaScript の奇妙な動作 配列_JavaScript のヒント

WBOY
リリース: 2016-05-16 15:18:30
オリジナル
1332 人が閲覧しました

プログラミング言語における配列の重要性は自明のことですが、JavaScript の配列は最も一般的に使用されるオブジェクトの 1 つであり、弱い型であるため、非常に柔軟で強力です。同じ型またはそのサブタイプの要素のみを格納できる Java などの厳密に型指定された高級言語の配列とは異なり、JavaScript は複数の型の要素を同じ配列に格納でき、長さを動的に調整することもできます。データが増加するにつれて、または配列の長さの自動変更を減らします。

今日は JavaScript の配列を確認し、彼の奇妙な動作をいくつかまとめました。間違いがある場合は、ご指摘ください。

奇妙な 1: Array() コンストラクター関数は、新しいキーワードを使用せずに呼び出すことができます:

Array() コンストラクターは、配列の要素として渡されたパラメーターを使用して配列を作成します。通常、次のように呼び出します。

var a = new Array(1, 2, "bom!");
a.length; //3
console.log(a); //[1, 2, "bom!"] 
ログイン後にコピー
ただし、次のように new を省略することもできます:


var a = Array(1, 2, "bom!");
a.length; //3
console.log(a); //[1, 2, "bom!"] 
ログイン後にコピー
内部実装の仕組みは分かりませんが、コンストラクタ関数は以下のように定義されているのではないかと思います。


function Array(args) {
//如果,this不是Array的实例的话,
//说明不是通过new调用的,则在这里再重新调用
if( !this instanceof Array) {
return new Array(args);
}//后面是正常调用时的实现代码<br />//...<br />} 
ログイン後にコピー

奇妙な 2: コンストラクターにパラメーターが 1 つだけ渡された場合、動作は予測できません

パラメータが 1 つだけ渡され、このパラメータが整数の場合、配列が取得され、長さはこのパラメータと同じになります


var a = new Array(12);
console.log(a.length); //12
console.log(a); //[] 
ログイン後にコピー
浮動小数点数のみを渡すと、エラーが報告されます:


var a = new Array(1.1); //Uncaught RangeError: Invalid array length(…) 
ログイン後にコピー
文字列を配列の最初の要素として渡すことは、正常に機能します。


var a = new Array("1.1");
console.log(a.length); //
console.log(a); //["1.1"] 
ログイン後にコピー
しかし、曖昧さを避けるために、配列をリテラルの形式で直接作成することが最善であることをお勧めします。


var a = []; //空数组
var a = [1, 1, "bom"]; //三个元素
var a = [12]; //一个元素,并且元素是12 
ログイン後にコピー

奇妙な 3: 配列の長さ属性は変更可能 (書き込み可能)

以下のように長さを2から100に直接変更して修正成功しました! ! !


var a = [1, 2, 3, 4];
console.log(a.length); //4
a.length = 100; 
console.log(a.length); //100 
ログイン後にコピー
長さは 100 ですが、要素 a[4] ~ a[99] は存在せず、たとえば、0 から a.length までのループでそれらの値を要求すると、未定義になります。 。


次を見る:


var a = [1, 2, 3, 4];
a.length = 100;
console.log(a[10]); //undefined
console.log(99 in a); //false 
ログイン後にコピー
以下の例と似ています:


var a = [1, 2, 3, 4];
a[99] = undefined;
console.log(a.length); //100 
ログイン後にコピー
違いは、ここで a[99] が存在するのは、未定義の値があるにもかかわらず、作成したためです。しかし、次のように、a[4] から a[98] までのすべての要素は存在しません:


var a = [1, 2, 3, 4];
a[99] = undefined;
console.log(99 in a); //true;
console.log(98 in a); //false
console.log(a.length); //100 
ログイン後にコピー
上記では、JavaScript 配列の奇妙な動作について説明しました。記事がうまく書かれていない場合はご容赦ください。ありがとうございます。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート