オブジェクトの分類
組み込みオブジェクト:エンジンの初期化フェーズで作成されるオブジェクト。Javascriptリファレンスマニュアルにアクセスして表示できます。(Www.w3school.com.cn)
ホストオブジェクト:ECMAScriptによって実装されたホスト環境によって提供されるオブジェクト。すべてのBOMおよびDOMオブジェクトはホストオブジェクトです。
カスタムオブジェクト
アレイ
これは、通常のオブジェクトと同様に、いくつかの値を格納するために使用される組み込みオブジェクトです。違いは、通常のオブジェクトは属性名として文字列を使用するのに対し、配列はインデックス操作要素として数値を使用することです。オブジェクトを作成する3つの方法:
var arr = new Array();
var arr1 = new Array(3);//3个元素
var arr2 = new Array(1, 44, 5);//三个元素1,44,5
var arr3 = [1,2,3,5];//字面量创建数组
配列要素は任意のタイプにすることができます(オブジェクト、関数、配列は2次元配列を含む)
var length = 7; // 数字
var lastName = "Gates"; // 字符串
var cars = ["Porsche", "Volvo", "BMW"]; // 数组
var x = {
firstName:"Bill", lastName:"Gates"}; // 对象
var y = {
fuction(){
alert(1)},fuction(){
alert(2)}} //函数
連続していない配列を作成しないようにしてください。存在しないインデックスを読み取った場合、エラーは報告されませんが、未定義が返されます。
長さ属性
変更された長さがアレイの長さよりも大きい場合、余分な部分は空になり、アレイの長さよりも短い場合、余分な部分は削除されます。
arr2[arr2.length]=2;
arr2[arr2.length]=12;
lengthプロパティを使用して、配列の最後の位置に新しい要素を継続的に追加できます。
配列の4つの方法
pushメソッド(変更された配列の長さを戻り値として使用)
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr + "<br />")
document.write(arr.push("James") + "<br />")
document.write(arr)
George,John,Thomas
4
George,John,Thomas,James
pop()メソッド(配列の最後の要素を削除して返す)
var nan = [1, 2, 3, 4];
var waf = nan.pop();
console.log(waf);//4
unshift()メソッド(1つ以上の要素を配列の先頭に追加し、新しい長さを返します。)
var waf2=nan.unshift(4,7,9);
console.log(waf2);//6
console.log(nan);//4,7,9,1,2,3
shift()メソッド(配列の最初の要素を削除して返す)
console.log(nan.shift());//4
foreach()メソッド
/**
* foreach方法需要一个函数作为参数
* 像这种函数,由我们创建但是不由我们调用,称为回掉函数
* 数组中几个元素函数执行几次,每次执行,浏览器都会将遍历到的元素
* 以实参的形式传递进来
* 浏览器会在回调函数中传入三个参数
* 第一个参数,当前遍历的元素
* 第二个参数,当前遍历元素的索引就是数组的序号
* 第三个参数,正在遍历的数组(就是arr2数组)
*/
var arr2 = ["赵", "刘", "王", "孙", "增"];
arr2.forEach(function (value, index, array) {
console.log("姓氏"+value);
});
スライス(メソッドは既存の配列から選択された要素を返します)
var arr2 = ["赵", "刘", "王", "孙", "增"];
/**
* arrayObject.slice(start,end)可以从数组提取指定元素,不会改变原数组,将截取元素封装在新数组
* 参数:1.截取开始位置的开始的索引(从0开始,如果为负数,意味着从尾部开始,-1最后一个元素),包括开始元素
* 2.截取结束位置的索引(从0开始,如果为负数,意味着从尾部开始,-1最后一个元素),不包括截止元素。
*/
var result = arr2.slice(0, 2);
console.log(result);//"赵", "刘",
splice()メソッド(要素を削除し、配列に新しい要素を追加します)
フォーマット:
arrayObject.splice(index,howmany,element1,.....,elementX)
パラメータ | 説明 |
---|---|
インデックス | 必須。要素を追加/削除する場所を指定します。このパラメータは、挿入または削除する配列要素のインデックスです。数値である必要があります。 |
幾つ | 必須。削除する要素の数を指定します。数値である必要がありますが、「0」にすることもできます。このパラメーターが指定されていない場合、インデックスの先頭から元の配列の末尾までのすべての要素が削除されます。 |
element1 | オプション。配列に追加する新しい要素を指定します。インデックスが指す添え字から挿入します。 |
elementX | オプション。いくつかの要素を配列に追加できます。 |
/**
* splice()方法 ,将删除元素当做返回值,包括起始位置
* 如果想要添加元素将第二个参数设置为0,从起始位置依次添加元素,原来元素自动右移动
*/
// var result2 = arr2.splice(1,2);
// console.log(result2);//刘,王
var result3 = arr2.splice(1,0,"吴","唐");
console.log(arr2);//赵,吴,唐 ,刘,王,孙,增。
sortメソッド(配列の要素をソートします)
/**
*sort方法,默认Unicode编码进行排序,从小到大
* 即使是纯数字也会按照Unicode编码排序,会出现错误,因此需要我们自己定义排序规则
*我们可以在sort()添加一个回调函数,指定排序规则,回调函数有两个形参
* 浏览器会分别使用数组中的元素作为实参调用回调函数
* 是用哪个元素调用不确定,但肯定数组中a在b前边,
* 如果返回一个大于0值,元素位置交换,
* 如果小于0的值,位置不交换,
* 如果值为0,认为相等,也不交换
*/
var arr4 = [2, 4, 1, 9, 11, 3]
arr4.sort();
console.log(arr4);// 1, 11, 2, 3, 4, 9 出现错误
arr4.sort(function (a, b) {
//升序排序
return a-b;
//降序排序
return b-a;
});
console.log(arr4);// [ 1, 2, 3, 4, 9, 11 ]
折り返し電話
簡単に言うと、最初に関数を記述してメソッド名を指定するか、匿名関数をパラメーターとして直接指定します。直接使用することはできませんが、メソッドを直接使用します。使用する必要がある場合は、コールバック関数の呼び出しと呼ばれるメソッドを直接トリガーできます(関数パラメーターで別の関数を定義します)。 、または着信メソッド)
function say (value) {
alert(value);
}
function execute (someFunction, value) {
someFunction(value);
}
execute(say, 'hi js.');
対
function execute (someFunction, value) {
someFunction(value);
}
execute(function(value){alert(value);}, 'hi js.');
上記の最初のコードは、sayメソッドをパラメーターとしてexecuteメソッドに
渡すことです。2番目のコードは、anonymous関数をパラメーターとしてexecuteメソッドに直接渡すことです。
実際:
function say (value) {
alert(value);
}
// 注意看下面,直接写say方法的方法名与下面的匿名函数可以认为是一个东西
// 这样再看上面两段代码是不是对函数可以作为参数传递就更加清晰了
say;
function (value) {
alert(value);
}
ここでのsayまたはanonymous関数は、コールバック関数と呼ばれます。(この部分の参照:https://segmentfault.com/a/1190000012026011)
配列オブジェクトメソッド
方法 | 説明 |
---|---|
concat() | 2つ以上のアレイを接続して、結果を返します。 |
join() | 配列のすべての要素を文字列に入れます。要素は指定された区切り文字で区切られます。 |
ポップ() | 配列の最後の要素を削除して返します |
押す() | 配列の最後に1つ以上の要素を追加し、新しい長さを返します。 |
逆行する() | 配列内の要素の順序を逆にします。 |
シフト() | 配列の最初の要素を削除して返します |
スライス() | 既存の配列から選択した要素を返す |
ソート() | 配列の要素を並べ替える |
スプライス() | 要素を削除し、新しい要素を配列に追加します。 |
toSource() | オブジェクトのソースコードを返します。 |
toString() | 配列を文字列に変換し、結果を返します。 |
toLocaleString() | 配列をローカル配列に変換し、結果を返します。 |
unshift() | 配列の先頭に1つ以上の要素を追加し、新しい長さを返します。 |
valueOf() | 配列オブジェクトの元の値を返します |
アレイトラバーサル
<script type="text/javascript">
function person(name, age) {
this.name = name;
this.age = age;
}
person.prototype.toString = function () {
return "person[name=" + this.name + ",age" + this.age + "]";
}//修改toString函数返回值
var per = new person("选悟空", 23);
var per1 = new person("刘悟空", 3);
var per2 = new person("张悟空", 13);
var per3 = new person("吴悟空", 33);
var per4 = new person("关悟空", 15);
/**
* 定义数组将其全部装进去
*/
var arr = new Array();
arr.push(per, per1, per2, per3, per4)
/**
* 筛选未成年在本数组内
*/
for (var i = 0; i < arr.length; i++) {
if (arr[i].age >= 18) {
for (var j = i; j < arr.length-1; j++) {
//arr.length-1,防止越界
arr[j]=arr[j+1];//删除这个成年的元素
}
arr.length--;//删除一个大于18数的,长度减一
}
}
console.log(arr);//3,13,15
</script>
アレイの重複排除
var arr = [1, 5, 3, 2, 4, 2, 2, 7, 1, 3, 4, 7, 7, 9, 7, 7, 3, 8];
/**
* 去除数组中的重复数字
*/
function removesame(arr1) {
for (var i = 0; i < arr1.length; i++) {
for (var j = i + 1; j < arr1.length; j++) {
if (arr1[i] == arr1[j]) {
arr1.splice(j,1);
/**
* splice方法删除数组中一个元素后边元素会往前顶,如果不j--,这个数字会逃过检查
* 从而去重失败
*/
j--;
}
}
}
return arr1;
}
var arr2 =removesame(arr);
console.log(arr2);//1, 5, 3, 2, 4, 7, 9, 8