一乎串、基本概念
1店枣、parseInt、parseFloat
parseInt('123',10) // 第二個參數(shù)為轉(zhuǎn)換進制灌闺,默認(rèn)為10
parseFloat('12.12') //不接受第二個參數(shù)
parseFloat('12.12.123') // 12.12 制取第一個小數(shù)點艰争,其他的剔除
二、變量桂对、作用域和內(nèi)存問題
1、String類型:
ECMAScript中鸠匀,字符串不是引用類型蕉斜。
2、垃圾收集
## 顯式賦值Null,以便垃圾收集器收集宅此。
function createPerson(name){
var localPerson = new Object();
localPerson.name = name;
}
var globalPerson = createPerson("Nicholas");
globalPerson = null; // 手工解除 globalPerson 的引用,方便垃圾收集器收集
小結(jié):
JavaScript 變量有兩種類型:基本類型
和引用類型
机错。
- 基本類型包含以下 5 種基本數(shù)據(jù)類型:
Undefined
、Null
父腕、Boolean
弱匪、Number
和String
。 - 引用類型:對象璧亮。
基本類型值和引用類型值具 有以下特點:
? 基本類型
值在內(nèi)存中占據(jù)固定大小的空間
萧诫,因此被保存在棧內(nèi)存
中;
? 從一個變量向另一個變量復(fù)制基本類型的值,會創(chuàng)建這個值的一個副本;
? 引用類型
的值是對象
枝嘶,保存在堆內(nèi)存
中;
? 包含引用類型值的變量實際上包含的并不是對象本身帘饶,而是一個指向該對象的指針;
? 從一個變量向另一個變量復(fù)制引用類型的值
,復(fù)制的其實是指針
群扶,因此兩個變量
最終都指向同 一個對象
;
? 確定一個值是哪種基本類型
可以使用 typeof
操作符及刻,而確定一個值是哪種引用類型
可以使用 instanceof
操作符。
? 離開作用域的值將被自動標(biāo)記為可以回收竞阐,因此將在垃圾收集期間被刪除缴饭。
?“標(biāo)記清除”
是目前主流的垃圾收集算法,這種算法的思想是給當(dāng)前不使用的值加上標(biāo)記
骆莹,然
后再回收其內(nèi)存颗搂。
三、引用類型
1汪疮、Array
## 1峭火、toString()、toLocalString()智嚷、valueOf()
var colors = ["red", "blue", "green"]; // 創(chuàng)建一個包含 3 個字符串的數(shù)組
console.log(colors.toString()); // "red,blue,green"
console.log(colors.valueOf()); // ["red","blue","green"]
console.log(colors); // ["red","blue","green"]
2卖丸、Array 的迭代方法
每個方法都接收兩個參數(shù):要在每一項上運行的函數(shù)和 (可選的)運行該函數(shù)的作用域?qū)ο蟆绊?this 的值。
傳入這些方法中的函數(shù)會接收三個參數(shù):數(shù)組項的值
盏道、該項在數(shù)組中的位置
和數(shù)組對象本身
稍浆。
? every():對數(shù)組中的每一項運行給定函數(shù),如果該函數(shù)對每一項
都返回 true猜嘱,則返回 true衅枫。
? some():對數(shù)組中的每一項運行給定函數(shù),如果該函數(shù)對任一項
返回 true朗伶,則返回 true弦撩。
? filter():對數(shù)組中的每一項運行給定函數(shù),返回該函數(shù)會返回 true
的項組成的數(shù)組
论皆。
? forEach():對數(shù)組中的每一項運行給定函數(shù)益楼。這個方法沒有返回值
猾漫。
? map():對數(shù)組中的每一項運行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組感凤。
以上方法都不會修改數(shù)組中的包含的值悯周。
## every()、some()
var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.every(function(item, index, array){
return (item > 2);
});
alert(everyResult); //false
var someResult = numbers.some(function(item, index, array){
return (item > 2);
});
alert(someResult); //true
## filter()
var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item, index, array){
return (item > 2);
});
alert(filterResult); //[3,4,5,4,3]
## map()
var numbers = [1,2,3,4,5,4,3,2,1];
var mapResult = numbers.map(function(item, index, array){
return item * 2;
});
alert(mapResult); //[2,4,6,8,10,8,6,4,2]
## forEach()
var numbers = [1,2,3,4,5,4,3,2,1];
numbers.forEach(function(item, index, array){
item++;
});
console.log(numbers); // [1,2,3,4,5,4,3,2,1]
由于 forEach沒有返回值陪竿,且第一個參數(shù)的函數(shù)不會影響原數(shù)組禽翼,所以該方法基本只適用于遍歷取值。
3族跛、Array 的排序 sort(function(a,b){...})
回調(diào)函數(shù)中:
a < b
返回負(fù)數(shù)
則不調(diào)換a闰挡、b的位置
;返回正數(shù)
則調(diào)換a庸蔼、b的位置
解总;0
則不變
var a = [0,4,5,20,12,25,15];
a.sort(function(a,b){
return a-b; // 升序排列
return b-a; // 降序排列
})
四、面向?qū)ο?/h2>
1姐仅、繼承
/**
* 繼承關(guān)系-- prototype
*/
function Animal() {
this.name = 'animal';
}
Animal.prototype.sayName = function() {
alert(this.name);
};
function Person() {}
console.log(Person.prototype.constructor); // [Function: Person]
// 人繼承自動物
Person.prototype = Animal.prototype;
console.log(Person.prototype.constructor); // Function: Animal]
// 更新構(gòu)造函數(shù)為人
Person.prototype.constructor = 'Person';
var person = new Person();
console.log(Person.prototype); // { sayName: [Function] }
console.log(person.__proto__); // { sayName: [Function] }
console.log(person.__proto__ === Person.prototype); // true
/**
* ************************************
* ********* 實例對象的__proto__ 與該實例對象的構(gòu)造函數(shù)的 prototype 是絕對相等的花枫。
* ************************************
*/
/**
* 繼承關(guān)系-- prototype
*/
function Animal() {
this.name = 'animal';
}
Animal.prototype.sayName = function() {
alert(this.name);
};
function Person() {}
console.log(Person.prototype.constructor); // [Function: Person]
// 人繼承自動物
Person.prototype = Animal.prototype;
console.log(Person.prototype.constructor); // Function: Animal]
// 更新構(gòu)造函數(shù)為人
Person.prototype.constructor = 'Person';
var person = new Person();
console.log(Person.prototype); // { sayName: [Function] }
console.log(person.__proto__); // { sayName: [Function] }
console.log(person.__proto__ === Person.prototype); // true
/**
* ************************************
* ********* 實例對象的__proto__ 與該實例對象的構(gòu)造函數(shù)的 prototype 是絕對相等的花枫。
* ************************************
*/