js學習筆記


javacript筆記
根據EC5.0
一共有六種數據類型:
number,string,bool
undefine,null
object(廣義的) --->object(狹義的),array,function javascript

前五種叫primitive type,最後一種是complex object
三種判斷對象類型的方法:
typeof,instanceof,Object.prototype.toStringjava

typeof 前三類型就是基本類型
typeof undefined 是undefined
typeof null 是 object //由於歷史的緣由,爲了兼容之前的代碼,並不表示null是對象
typeof [] 是object 數組

null和undifined的區別:
null表示空值
undefined表示不存在值瀏覽器

實際上,全部數據,均可以被看做廣義的對象,或說用對象方式調用
var s = new String("123");//s是object
這六個值是false:undefined,null,0,"",false,NaN 函數

自動分號添加:javascript引擎prototype

錯誤類型:
最通常的錯誤類型Eooro
六種錯誤類型
SystaxError
Reference Error
RangeError
TypeError
URIError
EvalError //EC5中再也不出現對象

函數:
三種聲明函數的方法
一、function命令
function print(s) {
console.log(s);
}
二、函數表達式 賦值變量
var print=function(s){
console.log(s);
}
function後不該加函數名,若是加了,只在函數內部有效
三、Function構造函數 //不多人使用
var print=new Function("s","console.log(s)"); //最後一個參數是函數體,以前的參數若是存在,則是函數的參數
var print=Function("s","console.log(s)");ip

做爲第一等公民:函數能夠做爲其餘數據類型同樣使用,如能夠將函數名賦值給變量和對象的屬性,也能夠看成參數傳入其餘函數,或者做爲函數的結果返回。也所以,函數會像變量聲明同樣,得到提高。
使用賦值變量的方式聲明函數,會致使,先聲明,後賦值。也就是說,變量是提高了,但還未賦值。 所以,當同一個函數使用function命令和變量賦值的方式同時聲明的話,js引擎老是會認定賦值語句的定義。
var f = function() {
console.log('1');
}作用域

function f() {
console.log('2');
}字符串

f() // 1

按照ECMA規範,不能在非函數中聲明函數,但實際傻瓜,不少瀏覽器能夠運行。但又由於變量提高,本意圖使用條件語句判斷是否聲明,實際上沒有效果。所以,要達到條件語句的效果,只能使用函數表達式

函數的屬性:
name:函數的名稱
length 函數的參數個數

做用域:
區塊block自己不構成做用域,所以{}只是用於for,if,while,function等語法結構
所以,做用域只分爲兩種:全局做用域和函數做用域。

函數做用域內的變量會覆蓋全局變量
函數做用域內的變量也一樣存在變量提高的現象
函數的參數能夠省略,若省略,則其值爲undefined

關於傳值和傳址:
在C#中,若是傳遞的參數是原始類型(int,float等)或結構體(struct),那麼就是傳值調用。
若是傳遞的參數是類(class)那麼就是傳引用調用。(可是當函數內部給對象總體作改變時,那麼,仍舊是傳值)
若是傳遞的參數前有ref或者out關鍵字,那麼就是傳引用調用。
在JS中,前兩條一樣成立。固然,這裏的對象是指廣義的,即包括對象,函數和數組。

arguments[]對象包含了函數運行時的全部參數可是arguments雖然很像數組,其實不是數組,而是對象- -! 所以數組的方法如slice和foreachslice(i,j)方法,若是是數組使用,則從i位置,切割到j位置,返回新的子數組,原先的數組不變。若是是string使用,也是返回一個新的子字符串,原先的字符串不變。

相關文章
相關標籤/搜索