js中有7種資料型別,包括五種基本資料型別(number,string,boolean,undefined,null),和一種複雜資料型別(object)以及es6語法新增的symbol資料型別
es6語法新增:symbol資料型別 let symbol = symbol("aaa"); 沒有建構函式,不能被new
typeof 操作符
由於js
中的變數是鬆散型別的,所以它提供了一種檢測當前變數的資料型別的方法,也就是typeof關鍵字.
typeof 123 //number
typeof 'abc' //string
typeof true //boolean
typeof undefined //undefined
typeof null //object
typeof //object
typeof [ ] //object
typeof console.log() //function
null型別進行typeof操作符後,結果是object,原因在於,null型別被當做乙個空物件引用。
1.number型別
number型別包含整數和浮點數(浮點數數值必須包含乙個小數點,且小數點後面至少有一位數字)兩種值。
nan:非數字型別。特點:① 涉及到的 任何關於nan的操作,都會返回nan ② nan不等於自身。
isnan() 函式用於檢查其引數是否是非數字值。
isnan(123) //false isnan("hello") //true
2.string型別
字串有length屬性。
字串轉換:轉型函式string(),適用於任何資料型別(null,undefined 轉換後為null和undefined);tostring()方法(null,defined沒有tostring()方法)。
3.boolean型別
該型別只有兩個值,true和false
4.undefined型別
只有乙個值,即undefined值。使用var宣告了變數,但未給變數初始化值,那麼這個變數的值就是undefined。
5.null型別
null型別被看做空物件指標,前文說到null型別也是空的物件引用。
6.object型別
js中物件是一組屬性與方法的集合。這裡就要說到引用型別了,引用型別是一種資料結構,用於將資料和功能組織在一起。引用型別有時候也被稱為物件定義,因為它們描述的是一類物件所具有的屬性和方法。
三大引用型別
1.object型別
我們看到的大多數型別值都是object型別的例項,建立object例項的方式有兩種。
第一種是使用new操作符後跟object建構函式,如下所示
var person = new object();
person.name = "micheal";
person.age = 24;
第二種方式是使用物件字面量表示法,如下所示
var person = ;
或者var person = object.create(原型);
2.array型別
陣列的每一項可以用來儲存任何型別的資料,也就是說,可以用陣列的第乙個位置來儲存字串,第二個位置儲存數值,第三個位置儲存物件....另外,陣列的大小是可以動態調整的。
建立陣列的基本方式有兩種
第一種是使用array建構函式,如下所示
var colors = new array("red","blue","yellow");
第二種是使用陣列字面量表示法,如下所示
var colors = ["red","blue","yellow"];
3 function型別
每個函式都是function型別的例項,而且都與其他引用型別一樣具有屬性和方法。函式通常是使用函式宣告語法定義的,如下所示
function sum(num1,num2);
這和使用函式表示式定義函式的方式相差無幾。
var sun = function ();
也就是說,js按照儲存方式分為值型別和引用型別。那麼他們的計算有什麼區別呢?
題目1: var a = 100;
var b = a;
a = 200;
console.log (b);
題目2: var a = ;
var b = a;
b.age = 21;
console.log (a.age);
題目1的答案是 100,題目2的答案是21,
題目1是簡單的值型別,在從乙個變數向另乙個變數賦值基本型別時,會在該變數上建立乙個新值,然後再把該值複製到為新變數分配的位置上。
此時,a中儲存的值為 100 ,當使用 a 來初始化 b 時,b 中儲存的值也為100,但b中的100與a中的是完全獨立的,該值只是a中的值的乙個副本,此後,
這兩個變數可以參加任何操作而相互不受影響。也就是說基本型別在賦值操作後,兩個變數是相互不受影響的。
題目2是引用型別,當從乙個變數向另乙個變數賦值引用型別的值時,同樣也會將儲存在變數中的物件的值複製乙份放到為新變數分配的空間中。
這時儲存在變數中的是物件在堆記憶體中的位址,所以,與簡單賦值不同,這個值的副本實際上是乙個指標,而這個指標指向儲存在堆記憶體的乙個物件。那麼賦值操作後,
兩個變數都儲存了同乙個物件位址,則這兩個變數指向了同乙個物件。因此,改變其中任何乙個變數,都會相互影響。
因此,引用型別的賦值其實是物件儲存在棧區位址指標的賦值,因此兩個變數指向同乙個物件,任何的操作都會相互影響。
本人正在學習和摸索中,如有錯誤,歡迎指正!
JS中的六大資料型別
js中有六種資料型別,包括五種基本資料型別 number,string,boolean,undefined,null 和一種複雜資料型別 object 1.number型別 number型別包含整數和浮點數 浮點數數值必須包含乙個小數點,且小數點後面至少有一位數字 兩種值。nan 非數字型別。特點 ...
JS中的六大資料型別
js中有六種資料型別,包括五種基本資料型別 number,string,boolean,undefined,null 和一種複雜資料型別 object typeof 操作符 由於js中的變數是鬆散型別的,所以它提供了一種檢測當前變數的資料型別的方法,也就是typeof關鍵字.typeof 123 n...
小白篇 七 大資料HiveSql優化
獲取原文 簡短介紹 是不是有很多小夥伴,上完一天班之後感覺啥也沒幹呢?是不是每天就跑了幾次hivesql一天就結束了呢?那麼優化hivesql可以給我們帶來如下的提公升 是不是每天可以執行更多hivesql了,做更多的資料需求了呢?了解底層技術引擎的工作流程,能夠更好的告訴我們該如何優化。mapre...