1. 程式人生 > >JavaScript基礎知識(數據類型)

JavaScript基礎知識(數據類型)

進制 等於 正則 可能 捕獲 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. 1.通過ID獲取元素,如果ID名字不存在,那麽返回null;
  2. 2.通過正則進行捕獲時,如果沒有捕獲到內容,那麽結果是null;
  3. 3.在清空對象,銷毀堆內存時,給對象賦值時,賦值為null;
常見的undefined的情況
  1. 當獲取對象屬性名對應的屬性值時如果屬性名不存在,那麽返回值是undefined;
  2. 函數的形參如果沒有實參賦值,在函數中默認存儲undefined
  3. 如果函數沒有return,那麽函數的返回值是undefined;
  4. 如果變量只聲明,沒有賦值,那麽默認存儲也是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基礎知識(數據類型)