JavaScript基礎知識(數據類型)
阿新 • • 發佈:2018-08-08
進制 等於 正則 可能 捕獲 fas 整體 fcc sta
數據類型
布爾:true/fasle
console.log(typeof true);// "boolean"
Number : true -->1 false -->0
console.log(Number(true)); console.log(Number(false));
Boolean : 把其他數據類型轉換布爾值;
console.log(Boolean(12));//true console.log(Boolean(10));//true console.log(Boolean(0));//false console.log(Boolean("{}"));//true console.log(Boolean("12px"));//true console.log(Boolean([]));//true console.log(Boolean({}));//true console.log(Boolean(null));//false console.log(Boolean(undefined));//false console.log(Boolean(NaN));//false console.log(Boolean(/\d/));//true
其他數據類型轉布爾類型是false有且只有五個值: 0 "" NaN null undefined;
邏輯運算符: ||: 或 &&: 並且; !取反
1.放在if條件中;
|| : 只要其中有一個為true,整體結果是true; && : 只要有一個是false,整體結果是false;
if ("" || 0) { console.log(100) } if (99 && 0) { console.log(0); }
2.賦值作用;
如果前面這個值轉布爾是true,直接取前面這個值;如果轉布爾是false,直接取後面的那個值;
var abc = "12px" || undefined; console.log(abc);//12px
如果前面轉布爾是true,直接取後面那個值;如果轉布爾是false,直接前面的值;
var bcd = null && 17; console.log(bcd);//null
數據類型之間的比較: true /false;
!:取反;首先會把後面的值轉換成布爾值,然後在取反; console.log(!1);//true !!:直接把當前轉換布爾值 console.log(!!”“);//false
null和undefined
null 和 undefined都代表沒有; typeof null –> “object”; 空對象指針; 區別: null 表示現在沒有,但是以後可能會有; undefined :現在沒有,以後也不能有;常見的null的情況
- 1.通過ID獲取元素,如果ID名字不存在,那麽返回null;
- 2.通過正則進行捕獲時,如果沒有捕獲到內容,那麽結果是null;
- 3.在清空對象,銷毀堆內存時,給對象賦值時,賦值為null;
- 當獲取對象屬性名對應的屬性值時如果屬性名不存在,那麽返回值是undefined;
- 函數的形參如果沒有實參賦值,在函數中默認存儲undefined
- 如果函數沒有return,那麽函數的返回值是undefined;
- 如果變量只聲明,沒有賦值,那麽默認存儲也是undefined;
var gg = document.getElementById("ab"); console.log(gg);//null var obj = {a:1}; console.log(obj.b);//undefined var c; console.log(c);//undefined var a; console.log(a);//undefined
對象
1、引用數據類型,存儲到堆內存中; 對象: 由鍵值對組成;鍵值對由屬性值和屬性名組成;鍵值對用逗號隔開 屬性名和屬性值用冒號隔開; 屬性名是字符串類型,屬性值是數據類型的一種; var obj = {a:[]}; var o = {a:2} 沒有length屬性;沒有索引; console.log(obj[0]); var a = 1;
對象的定義
1.首先會開辟一個新的空間地址;空間地址是16進制;0-9a-f; 2.把鍵值對存儲到當前這個堆內存下; 3.把這個空間地址給了對象名;
// 對象名實際存儲的是一個空間地址; console.log(obj); var a = {}; var b = {}; // 在JS中遇到{}、[] 都會開辟新的空間地址; var a = b = {}; var a = b = c = d =10; d = 9; console.log(a);// 10; var a = b = c = {a:1}; c = {}; c.a = 2; console.log(a);//{a:1} console.log(c);// {a:2}
對象的增刪改查
var obj = {num:1,str:"abc",6:10}; // 1.新增鍵值對: // 對象名.屬性名=屬性值 obj.a = 100; console.log(obj); // 對象名[‘屬性名‘] = 屬性值; obj["a"] = 100; obj["12"] = 13; console.log(obj); // 如果屬性名是數字的話,會按照數字從小到大順序顯示; //2.查詢: 如果屬性名不存在,那麽獲取的屬性值是undefined; var v = obj.num; var b = obj["num"]; console.log(v);// 1 var c = "num"; var d = obj[c]; var obj = {num:1,str:"abc",6:10}; // 3.修改: 屬性沒有就是新增,有就是修改; obj.num = 10; obj.a = "1"; obj["num"] =100; console.log(obj); // 4.刪除 // 假刪除; //真刪除 obj.num = null // delete delete 對象名.屬性名 delete obj.num; console.log(obj); var a = obj.num; // in : 判斷當前屬性名在對象中是否存在;如果存在返回true,不存在返回false; // "屬性名" in 對象名 console.log("num1" in obj);
數組
數組:由數組成員組成,數組成員之間用逗號隔開; 有索引,有length; var ary = [12,12,47,128,”uu”,{},true]; 數組成員都有一個與之對應的索引;從0開始; 有length屬性,代表數組成員的個數;
console.log(ary[4]); console.log(ary.length);// 7 console.log(ary[ary.length - 1]); var a = []; var b = []; ary[7] = 18; console.log(ary);
檢測
typeof :返回一個字符串;字符串中內容代表當前的數據類型; typeof NaN -->"number" typeof null --> "object" 空對象指針
局限性: 只能區分基本數據類型;但是不能細分對象數據類型下的對象,數組,正則; typeof true–>”boolean” typeof undefined –>”undefined”
instanceof : 檢測當前實例是否屬於某個類的方法;
var pbj = {a:1}; var aru = [] console.log(pbj instanceof Object); console.log(pbj instanceof Array); console.log(aru instanceof Array);
constructor : 檢測當前實例的構造函數 Object.prototype.toString.call([]); 最準確的方式;
數據類型之間比較的規律
= : 賦值;
var a = 19; var a = 20; var obj = {}; obj.a = 100;
== : 比較; 返回一個布爾值;
console.log(1 == "1");// true console.log(1 == true);// true console.log([] == "1");// false console.log({} == []);// false console.log(NaN == NaN);// false console.log(null == null);// true console.log(null == undefined);// true console.log(null === undefined);// false*****NaN 和自己都不相等*****
數據類型比較的規律
- 對象==對象: 比較的是空間地址
- 對象==字符串 對象默認調用toString方法,先轉字符串,然後再進行比較
- 對象==布爾: 對象先轉字符串,再轉數字;布爾直接轉數字;
- 對象== 數字 : 對象先調用toString轉換成字符串,然後再轉number;
- 布爾== 數字 : 布爾轉數字;
- 字符串== 數字: 字符串轉數字;
- 布爾== 字符串 : 布爾轉數字,字符串也轉數字,然後進行比較;
- null == undefined : true;
- null 和 undefined 和其他數據類型比較都是false;
console.log({}=={})// false console.log({}=="");// false console.log({} == true);// false console.log([] == 0);// true console.log([]==false)// true console.log(true == 10);//false console.log("" == 0);"//true console.log(true == "1");// true console.log("1" == "1px");//false console.log("" == " ");//false
! : 首先會把後面的值轉成布爾值,然後再進行取反;
console.log([] === false);// true console.log(![] == false);// true; console.log(!isNaN("12px") == 0);// true; console.log(!{} == {});// false ({}).toString() "[object Object]"=== : 絕對比較;不會進行數據類型之間的轉換;只要數據類型不一樣,就是false;
console.log(1 === "1");//false console.log({} === {});// false console.log([] === false);// true
! :後面跟等號,代表不等於; !== : 絕對不等於 console.log([] !== false)// true != : 會進行數據類型之間的比較;
JavaScript基礎知識(數據類型)