js 數據類型筆記

這篇文章主要是對阮一峯老師javascript教程中數據類型和運算的筆記,方便記憶。
有需要的朋友建議直接觀看阮一峯老師javascript教程,寫得更詳細

一:數據類型概述

1、簡介6種數據

1.1數值(number):整數和小數
1.2字符串(string):文本
1.3布爾值(boolean):表示真僞的兩個特殊值,即true(真)和false(假)
1.4undefined:表示“未定義”或不存在
1.5null:表示空值,
1.6對象(object):各種值組成的集合,分成三個子類型。

  • 狹義的對象(object)
  • 數組(array)
  • 函數(function)

2、typeof 運算符

這個運算符測試一個值到底是什麼數據類型
重點就是

typeof null // "object"
typeof undefined // "undefined"

二、null, undefined 和布爾值

1、null, undefined轉數字化

null 轉爲數字是 0
undefined 轉爲數字是 NAN

2、null, undefined的使用場景

null表示空值。
undefined表示“未定義”,場景有4個

  • 2.1變量聲明瞭,但沒有賦值

    var i;
    i // undefined
  • 2.2調用函數時,應該提供的參數沒有提供,該參數等於 undefined

function f(x) {
  return x;
}
f() // undefined
  • 2.3對象沒有賦值的屬性
var  o = new Object();
o.p // undefined
  • 2.4函數沒有返回值時,默認返回 undefined
function f() {}
f() // undefined

3、布爾值

3.1哪些運算符會產出布爾值

  • 前置邏輯運算符: ! (Not)
  • 相等運算符:===,!==,==,!=
  • 比較運算符:>,>=,<,<=

3.2其他數據類型轉換成布爾值
轉換規則是除了下面六個值被轉爲false,其他值都視爲true。

  • undefined
  • null
  • false
  • 0
  • NaN
  • ""或''(空字符串)

3.3轉換成布爾值的應用環境
大部分是用於判斷程序流程,如下面把if()裏面判斷成布爾值

if ('') {
  console.log('true');
}

三、數值(該部分內容較多,我只是簡要摘取一部分)

數值組成方式
JavaScript 內部,所有數字都是以64位浮點數形式儲存。
第1位:符號位,0表示正數,1表示負數
第2位到第12位(共11位):指數部分
第13位到第64位(共52位):小數部分(即有效數字)

四、字符串

1、定義:
字符串就是零個或多個排在一起,放在單引號或雙引號之中的字符

2、字符串使用的異常場景

  • 2.1 單引號字符串的內部,可以使用雙引號,不能直接使用單引號。雙引號字符串的內部,可以使用單引號,不能直接使用雙引號
'key = "value"'
  • 2.2 在單引號字符串的內部,使用單引號,就必須在內部的單引號前面加上反斜槓,用來轉義
'Did she say \'Hello\'?'
// "Did she say 'Hello'?"
  • 2.3字符串默認只能寫在一行內,分成多行將會報錯
'a
b
c'
// SyntaxError: Unexpected token ILLEGAL
  • 2.4如果長字符串必須分成多行,可以在每一行的尾部使用反斜槓

注意,反斜槓的後面必須是換行符,而不能有其他字符(比如空格),否則會報錯。

var longString = 'Long \
long \
long \
string';

longString
// "Long long long string"
  • 2.5可以用+連接多個單行字符串,將長字符串拆成多行書寫
var longString = 'Long '
  + 'long '
  + 'long '
  + 'string';

2.6 es6新增寫法
使用`包裹字符串,就可以實現換行。**這個符號是鍵盤esc下面那個鍵**
clipboard.png

3、字符串的使用

3.1獲取字符串的長度

 var str = "hello";
    console.log( str.length );

3.2通過下標獲取到字符串某個字符的值

 console.log( str[0] );  //h
 console.log( str[str.length - 1]  ); // 0

3.3通過charaAt獲取到字符串某個字符的值

var str = "hello";
console.log( str.charAt(0) ); // h
console.log( str.charCodeAt(0) ); //輸出對應字符的ASCII碼

3.4字符串截取
注意截取後,原來的字符串不變

 var str = "hello world";
 var sub1 = str.substr(1, 3); // 第一個是開始位置, 第二個是長度  
 var sub2 = str.substring(1, 3); // 第一個是開始位置,第二個是結束位置,str[結束位置]不會被截取進去

3.5用search查找字符串內是否有對應的內容
原來的字符串不變

var str = "hello my world";
var s1 = str.search('my');   //6(開始位置) 找不到爲-1

3.6 用replace替換字符串的值
原來的字符串不變

 var s2 = str.replace('my', 'your') //前面是被替換內容,後面是替換內容

3.7改變字符串大小寫
字符串操作不會修改原來的字符串

var str = "Hello";
    str.toUpperCase(); //HELLO
    str.toLowerCase(); //hello

3.8字符串拼接

  • 兩個不同字符串相+
var str1='hello'
var str2='world'
str1+str2  //"helloworld"
  • 字符串名和字符串相加
var color ='red'

var str='衣服的顏色是'+color //衣服的顏色是red
  • 字符串模板
var name = '飢人谷'
var website = 'jirengu.com'

var str = `你好, 這裏是${name},${website},開啓你的前端之路`
//"你好, 這裏是飢人谷,jirengu.com,開啓你的前端之路"

五、對象

1、定義:

對象就是一組“鍵值對”(key-value)的集合,是一種無序的複合數據集合。

2、對象的組成

var obj = {
  foo: 'Hello',
  bar: 'World'
};
  • 該對象內部包含兩個鍵值對
  • foo是“鍵名”(成員的名稱),字符串Hello是“鍵值”(成員的值)
  • 兩個鍵值對之間用逗號分隔

3、鍵名的定義規則

對象的每一個鍵名又稱爲“屬性”(property)

  • 3.1對象的所有鍵名都是字符串,可以不用打引號
  • 3.2鍵名如果是數值,會轉成字符串
var obj = {
  1: 'a',
  3.2: 'b',
  1e2: true,
  1e-2: true,
  .234: true,
  0xFF: true
};
  • 3.3鍵名的命名滿足標識名的條件,不然就要打上引號
var obj = {
  1p: 'Hello World'
};

// 不報錯
var obj = {
  '1p': 'Hello World',
  'h w': 'Hello World',
  'p+q': 'Hello World'
};

4、鍵值的使用場景

對象的每一個鍵名又稱爲“屬性”(property),它的“鍵值”可以是任何數據類型。

  • 4.1屬性的值爲函數,通常把這個屬性稱爲“方法”,它可以像函數那樣調用。
var obj = {
  p: function (x) {
    return 2 * x;
  }
};

obj.p(1) // 2
  • 4.2屬性的值還是一個對象,就形成了鏈式引用。
var o1 = {};
var o2 = { bar: 'hello' };

o1.foo = o2;
o1.foo.bar // "hello"

5、對象獲取鍵值的方式(只有兩種)

  • 5.1通過對象名.屬性名來獲取屬性的值
var o1 = {};
var o2 = { bar: 'hello' };

o1.foo = o2;
**o1.foo.bar** // "hello" 
  • 5.2通過對象名['屬性名']來獲取屬性的值,注意中括號裏面是字符串,所以一定要加引號
o1['foo']
ol[foo]就是錯誤的,因爲瀏覽器解析時會認爲foo是一個變量,找不到這個變量就會報錯

6、對象的引用

  • 如果把一個原始類型(number 字符串 等)的值賦值給變量。那變量這時都是值的拷貝。
    如果把對象賦值給變量,我們只是將對象的存儲地址指向了變量。
  • 如果不同的變量名指向同一個對象,那麼它們都是這個對象的引用,修改其中一個變量,會影響到其他所有變量。
var o1 = {};
var o2 = o1;

o1.a = 1;
o2.a // 1

o2.b = 2;
o1.b // 2

7、表達式還是語句?

JavaScript規定,如果行首是大括號,一律解釋爲語句(即代碼塊)。
如果要解釋爲表達式(即對象),必須在大括號前加上圓括號。

eval('{foo: 123}') // 123   這是一個語句,表示一個代碼區塊,裏面有一個標籤foo,指向表達式123。
eval('({foo: 123})') // {foo: 123}  這是一個表達式,表示一個包含foo屬性的對象
{foo:123}.foo 是錯誤的
({foo:123}).foo //輸出的是123

8、對象的使用方法

8.1 檢查變量是否聲明
原理:在瀏覽器環境,所有全局變量都是window對象的屬性。
window.a的含義就是讀取window對象的a屬性,如果該屬性不存在,就返回undefined,並不會報錯。

if ('a' in window) {
  // 變量 a 聲明過
} else {
  // 變量 a 未聲明
}

8.2屬性的賦值
和讀取值一樣,有兩種方法

o.p = 'abc';
o['p'] = 'abc';

8.3用Object.keys查看所有屬性

var o = {
  key1: 1,
  key2: 2
};

Object.keys(o);
// ['key1', 'key2']

8.4 delete刪除對象的屬性

var o = {p: 1};
Object.keys(o) // ["p"]

delete o.p // true
o.p // undefined

注意:delete命令不能刪除var命令聲明的變量,只能用來刪除屬性。因爲var聲明的全局變量都是頂層對象的屬性,而且默認不得刪除。

var p = 1;
delete p // false
delete window.p // false

8.5用for...in循環用來遍歷對象的全部屬性
var obj = {a: 1, b: 2, c: 3};

for (var i in obj) {
console.log(o[i]);
}
// 1
// 2
// 3
i就是定義了一個變量,裏面放的就是對象的屬性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章