為什么80%的碼農都做不了架構師?>>> ??
弱類型語言
JavaScript是一種弱類型的語言。變量可以根據所賦的值改變類型。原始類型之間也可以進行類型轉換。其弱類型的物質為其帶來了極大的靈活性。
注意:原始類型使用值傳遞,復合類型使用引用傳遞。
原始類型 | Key |
---|---|
布爾型 | bool |
數值型 | number |
字符串型 | string |
空類型 | null |
未定義類型 | undefined |
toString方法可以把數值或布爾值轉換為字符串。parseFloat和parseInt函數可以把字符串類型轉變為數值。雙重非『!!』可以把字符串或數值轉變為布爾值。
復合類型 | Key |
---|---|
對象 | object |
函數 | function |
prototype
JavaScript是一種基于原型的語言,所以我們可以通過對JavaScript對象的原型進行操作來達成一些目的。比如:
- 給某個對象添加方法;
- 給某個對象添加屬性;
- 實現類似面向對象的功能;
- ...
如果把JavaScript中的所有元素都當成對象來看待的話,我們可以得到一個合理的數據存儲方式:JSON。
在JavaScript內部,所有的元素都可以認為是以JSON方式進行存儲的。換言之,每一個元素都是有Key以及Value兩部分組成。所以以下給對象Anim添加方法的方式都是正確的:
// Anim Classvar Anim = function() { // ...};// Add function to AnimAnim.prototype.start = function() {};Anim.prototype.stop = function() {};// Another Way to add function to a classAnim.prototype = { start: function() { // ... }, stop: function() { // ... }};
我們還可以使用下面的方式給Anim添加方法。這一方式是將prototype.method看作是一個key,將function(name,fn)看作是一個value,然后通過給function(name,fn)傳入對應的參數來實現給Anim添加方法的目的。我們還在method中加入了return this,以此來實現鏈式調用的目的。
// Add a method to the Function object that can be used to declare methods.Function.protype.method = function(name, fn) { this.prototype[name] = fn; return this; // 鏈式調用};var Anim = function() {};Anim.method('start', function() { // ...});Anim.method('stop', function() { // ...}); // Add a method to the Function object that can be used to declare methods.Function.protype.method = function(name, fn) { this.prototype[name] = fn; return this;};var Anim = function() {};Anim.method('start', function() { // ...});Anim.method('stop', function() { // ...});
鏈式調用
Anim.method('start', function() { // ...}).method('stop', function() { // ...});
函數是一等對象
在JavaScript中,『函數』被認為是帶有可執行代碼的復合對象。也就是說,對象所擁有的,函數都擁有,且對象所能做的,函數都可以做。
主要特性:
- 可以存儲于變量中;
- 可以作為參數傳給其他函數;
- 可以作為返回值從其他函數傳出;
- 可以在運行時構造。
由于函數是一種對象,所以我們可以以如下方式來使用函數:
// Function as Object(function() { // ...})()(function(a, b) { // ... return a + b})(1, 2)
對象的易變性
在JavaScript中,所有的元素都可以被當成是對象,而且JavaScript中,所有的對象都是易變的。
我們可以使用如下的方式在程序運行時給JavaScript對象屬性:
可以在需要的時候給對象添加屬性(包括方法):
function aFunction(){};aFunction.aAttribute = 0;
可以在需要的時候,通過對prototype的操作,給JavaScript對象添加方法:
function person(){ this.name="Aaron"; this.age=14;};person.prototype = { getName: function(){ return this.name; }, getAge: function(){ return this.age; }}
注意:由于JavaScript可以在任何時候為已經存在的對象添加屬性、方法,所以我們往往不能保證最終被調用的屬性、執行的方法是否是我們最初所編寫的。