[學習筆記]細數(shù)js數(shù)據(jù)類型

我為什么突然想寫數(shù)據(jù)類型..

when talking about javascript , always come arcoss with ECMAScript ,and I always want to ask what is the ECMAScript , and javascript the same as it ? or dialect?
of course not ,the core of javascript based on it and javascript is not only for Client, but for Server like Nodejs (its good I think) , I cant say more because I dont know too... so end.

ok..say person language
 實際上ECMAScript并沒有定義具體操作web pages 的方法,而javascript做了很多拓展,比如DOM BOM 來操作瀏覽器,今天在看ES6新規(guī)范,看到了symbol,set,map所以跑去看了一下數(shù)據(jù)類型才發(fā)現(xiàn)自己了解 的也挺少的,初學者,我也不太習慣寫文章,也罷,邊寫邊學..

js數(shù)據(jù)類型

js數(shù)據(jù)類型有原始數(shù)據(jù)類型(undefined null boolean number string symbol)
 之前在一個前端面試題目中看到j(luò)s基本數(shù)據(jù)類型有哪些: undefined boolean number string object 感覺挺混亂,我的理解是對你定義的變量用 typeof(variable)返回的是前面五個之一,所以才被稱為基本數(shù)據(jù)類型吧? 至于null哪去了 typeof(null)->'object',據(jù)說是歷史遺留問題 : typeof-null 查的資料以后有興趣可以看 /攤手
Ps: typeof只能返回前面五個基本數(shù)據(jù)類型和function(如果想要知道實例是什么類型的對象可以了解一下instanceof運算符)
還有引用數(shù)據(jù)類型(object) 可以看看ECMA-262文檔

An Object is logically acollection of properties. Each property is either a data
property, or an accessor property.
大概意思就是:
 js對象邏輯上是一大堆屬性的集合,每個屬性可以是:數(shù)據(jù)屬性和訪問器屬性

在Object上面繼承出很多類型Array() Function() RegExp Data()等等,這里就有一個和Object很像的Map數(shù)據(jù)結(jié)構(gòu)...
while Dynamic language means you dont need to tell js what type a variable is when declaring it as it work out for you auto.
寫多了C你會發(fā)現(xiàn)經(jīng)常被數(shù)據(jù)類型弄得宇宙無敵煩,往往定義出錯會導致結(jié)果相差甚遠,而且一些單片機內(nèi)部比如A/D取值精度也是很蛋疼..
初學者比如我就會覺得很神奇..變量在不同類型之間切換很方便 當然寫程序的時候申明了變量就賦予了特殊的意義 還是不要切來切去吧

細數(shù)原始數(shù)據(jù)類型

其實寫到這里..我有點寫不下去了..既然已經(jīng)寫了這么多了..還是好好把他們都描述一遍畢竟-以后就不用再去到處百度吧

  • undefined
    undefined是屬性是一個值
var example
typeof (example); //undefined 聲明了變量未初始化
typeof (example); //undefined 未聲明變量
function example() {
   //這是一段省略的程序
   return 0;    //控制臺輸入example()  輸出 0
   return ;  //控制臺輸入example()  輸出 undefined
  //這是函數(shù)沒有返回一個確定的值
}
var example = new Object();
example.prototype; //新建對象沒有prototype這個值所以undefined
  • null
    只有一個值null
    undefined表示變量沒有初始化而null則表示找不到對象是一個空對象指針,可以用來清空對象
null == undefined ; //true   undefined 是從null派生而來 
null === undefined ; //false
  • boolean
    布爾型數(shù)據(jù)有兩個值true or false 有兩種轉(zhuǎn)換方式
 Boolean(value) ;//顯式轉(zhuǎn)換 返回一個bool值
 var example ; //隱式轉(zhuǎn)換  很常見
 if(example) {XXX}  //example can be "null 0 false ""(empty string) undefined NaN"

ToBoolean轉(zhuǎn)換表

輸入 結(jié)果
Undefined false
Null false
布爾型 原值
數(shù)字型 當數(shù)值為0或NaN時為false,否則為true
字符串型 如果字符串為空則為false,否則true
對象 true
  • number
    可以表示整數(shù)和浮點數(shù) 有兩個比較特別的值 Infinity-Infinity (無窮大)
    Number()函數(shù)也可以轉(zhuǎn)換數(shù)字 如果返回值是一個非數(shù)值則會返回NaN以避免產(chǎn)生異常錯誤 parseInt()/parseFloat()可以接受參數(shù),進行進制轉(zhuǎn)換 缺省值是10
(0.1+0.2) == 0.3 -> false
NaN == NaN -> false
parseInt("0xff") -> 255
parseInt("123.1bl.2") -> 123
parseInt("123.1bl.2",2)  -> 1
parseInt("123.1bl.2",8) -> 83
parseInt("0001111") -> 1111

toNumber轉(zhuǎn)換表

輸入 結(jié)果
Undefined NaN
Null 0
布爾值 true -> 1  false -> 0
數(shù)值 不轉(zhuǎn)換
字符串 見上面的代碼塊
對象 DefaultValue
  • string
    不可描述 總之 很豐富 ]屬性以及方法也有很多 需要什么查什么 @.@
    toString轉(zhuǎn)換表
輸入 結(jié)果
Udefined "unedfined"
Null "null"
布爾型 表達式如果是真則返回“true”,否則“false”
數(shù)字型 轉(zhuǎn)換成數(shù)字的字符串表達 在控制臺測試可知輸出與輸入位數(shù)、精度 對于非數(shù)字的表達式,返回值是“NaN”
字符串型 不進行處理
對象 在ECMAscript中,轉(zhuǎn)換首先調(diào)用toPrimitive函數(shù),調(diào)用對象DefaultValue方法,有就返回結(jié)果 String(Array()) -> ""  String({a:1}) -> "[object Object]"
  • symbol
    這個是ES6新規(guī)范 要不是他.. 我就不會想寫這篇文章了..
    可是我還是看不懂.. 囤貨 -> 深入解析 ES6:Symbol

引用數(shù)據(jù)類型

不像C有結(jié)構(gòu)體C++有類,在javascript里面等同于"對象"這個名詞,其他引用類型都從Object引用類型繼承而來.
首先構(gòu)造對象的方法:

var father = {            //直接初始化方法
     name: "Lilei",
     age: 36,
}
father.work = "doctor";   //為對象添加屬性 刪除可以賦undefined
father.worktime = function() { alert("1,2,3,4,5");};

function People(name, age, person) {    //構(gòu)造函數(shù)法 參數(shù)可以是另一個對象
     this.name = name;
     this.age = age;
     this.father = person;     //這里就不寫閉包了..并不打算現(xiàn)在接觸....
}
var person1 = new People("Hanmeimei", 18,father)    //new運算符在后面
People.prototype.work = "student";   //通過原型添加屬性或方法
People.work; //注意輸出 undefined

貼張圖解釋一下


new運算符
 簡而言之: new運算符的作用就是構(gòu)造一個對象實例,構(gòu)造函數(shù)可以是像上面People一樣自定義(這時候?qū)?chuàng)建一個隱式引用鏈接到函數(shù)的prototype用于初始化實例對象的proto),也可以是js自帶的構(gòu)造函數(shù)比如Array()等,注意只有構(gòu)造函數(shù)具有prototype而實例沒有只有proto,new出來的對象上下文的this會指向這個對象實例。
原型和原型鏈 
 在javascript中原型實例指向一個他的原型的的鏈接,然后這個原型對象又有自己的原型,到null 為止,想象出來就是一條鏈子..
感覺和事件冒泡差不多,當我在自己的內(nèi)部找不到某個屬性或者方法的時候就會找自己原型函數(shù)的屬性和方法...


寫的好累 我要去學rails了,下次見 /微笑
2016/11/23
    amilyxy

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容