javascript 是一種動態(tài)語言,解釋性語言婶恼,腳本語言。
特點:聲明變量的關(guān)鍵字只有一個var榔组,解釋型語言解釋一行執(zhí)行一行熙尉,現(xiàn)解釋現(xiàn)執(zhí)行联逻,而且數(shù)據(jù)的類型天生就是浮點型搓扯。
** 由值來決定變量類型 **
typeof() -- 返回變量的數(shù)據(jù)類型
值類型--數(shù)據(jù)類型
分類:
- 不可改變的原始值(棧數(shù)據(jù))
- Number, String, Boolean, undefined, null
- 引用值(堆數(shù)據(jù))
- array, object, function
詳細分析:
1. Number:數(shù)值類型
- 如:
var a = 2;
var a = -3.1415;
var a = 100;
2. String:字符串類型
- 無論在雙引號里面寫的是什么,都是叫字符串包归。
- 如:
<script>
var a = "abc";
document.write(typeof(a) + " : " + a);
document.write("<br>");
var b = "你好";
document.write(typeof(b) + " : " + b);
document.write("<br>");
var c = "123";
document.write(typeof(c) + " : " + c);
</script>
image.png
3. Boolean 布爾類型
- 兩個值:true, false
- 如:
var a = true;
document.write(typeof(a) + " : " + a);
document.write("<br>");
var b = false;
document.write(typeof(b) + " : " + b);
image.png
4. undefined
- 值就為undefined锨推,意思:沒有定義的。
- 表示: 一個變量經(jīng)過了聲明但沒有賦值公壤,其值就為undefined换可。
- 如:
var a = undefined;
document.write(typeof(a) + " : " + a);
document.write("<br>");
var b;
document.write(typeof(b) + " : " + b);
image.png
5. null
- 表示一種占位,就是為了占位置厦幅。
- null -- 空的沾鳄,把原來的東西覆蓋掉就是用null。
- 注意:null數(shù)據(jù)類型為:object确憨。
- 如:
var a = null;
document.write(typeof(a) + " : " + a);
image.png
6. array 數(shù)組類型
- 數(shù)組里面的值可以是多種數(shù)據(jù)類型
- 如:
var arr = [1, 2, 3, 4, false, "abc"];
原始值與引用值的區(qū)別
原始值存入stack(棧)里面译荞,引用值存入heap(堆)里面瓤的。賦值方式不同。
- 原始值內(nèi)部吞歼,棧內(nèi)存與棧內(nèi)存之間的賦值關(guān)系是copy關(guān)系圈膏,就是說,從棧內(nèi)存中拷貝變量的一個副本篙骡,再將副本存到另一個變量里面稽坤。原變量的值發(fā)生改變,存儲副本的變量保持原有值糯俗,不會隨原變量的值改變而改變尿褪。
- 原始值的數(shù)據(jù)無法改變,就是說:一個棧內(nèi)存里面已經(jīng)存有一個變量的值了那么就無法改變了叶骨。
如:
var a = 10;
var b = a;
document.write(a);
document.write("<br>");
document.write(b);
document.write("<br>");
a = 20;
document.write(a);
document.write("<br>");
document.write(b);
image.png
- 引用值:棧內(nèi)存里面存放堆內(nèi)存里面數(shù)值的地址信息茫多,引用值拷貝給另一個引用值的是地址信息,這是為了方便找到堆內(nèi)存里面的值忽刽。
var arr = [1, 2];
var arr1 = arr;
document.write(arr);
document.write("<br>");
document.write(arr1);
document.write("<br>");
arr.push(3);
document.write(arr);
document.write("<br>");
document.write(arr1);
image.png
- 對原引用值進行重新的賦值不會影響副本引用值的值:
var arr = [1, 2];
var arr1 = arr;
document.write(arr);
document.write("<br>");
document.write(arr1);
document.write("<br>");
arr = [1, 3];
document.write(arr);
document.write("<br>");
document.write(arr1);
image.png