1. 七種數(shù)據(jù)類型
- number 數(shù)值 :整數(shù)和小數(shù)
- string字符串 : 文本
- boolean布爾值 :true false
- undefined :未定義或不存在
- null :空值
- object對象 : 值的集合
- symbol
前五種是基本類型
對象包括: object 、 array數(shù)組 钧萍、function函數(shù)
2. typeof 運算符 typeof 可以用來檢查一個沒有聲明的變量褐缠,而不報錯。
數(shù)值 : number
字符串 :string
布爾值 :boolean
函數(shù) :function
undefined :undefined
null : object
3.null 和 undefined
區(qū)別:null是一個空值 轉為數(shù)值時為0
undefined 是一個表示 “此處未定義” 的原始值风瘦,轉為數(shù)值時為 NaN
在 if 語句中兩個都是 false
相等運算符(==)甚至直接報告兩者相等
用法和含義
調用函數(shù)時队魏,某個參數(shù)未設置任何值,傳入null万搔,表示參數(shù)為空
undefined 未定義
- 變量聲明胡桨,但未賦值
- 調用函數(shù)時,應該提供的參數(shù)沒有提供瞬雹,該參數(shù)等于undefined.
- 對象沒有賦值的屬性
- 函數(shù)沒有返回值昧谊,默認返回undefined
4. 布爾值 true false
- 兩元運算符 &&(and) //(or)
- 前置邏輯運算符 ! (not)
- 相等運算符 === == !== !=
- 比較運算符 > < >= <=
一般用于程序流程的控制
空數(shù)組([])和空對象({})對應的布爾值酗捌,都是true
五個falsy值 其他都為true
undefined null 0 NaN ' '(空字符串) false
5. Number
所有數(shù)字都是以64喂浮點數(shù)儲存
數(shù)值精度
第一位 : 符號位 0 正 1 負
第2到12位: 指數(shù)部分
第13到64位:小數(shù)部分 (有效數(shù)字)
數(shù)值范圍:21024~2-1023
a> 2^1024 正向溢出 返回Infinity
a< 2^-1075 負向溢出 返回0
數(shù)值的表示法
科學計數(shù) :
123e3 //123000 123e-3 //0.123
自動轉為 小數(shù)點后的0 多余5
(0.0000003 //3e-7)
小數(shù)點前的數(shù)字多余21位
數(shù)值的進制
2 8 10 16 進制
十進制 : 沒有前導 0的數(shù)字
八進制: 0o 或0O的數(shù)值 或有前導0 只用到0-7的數(shù)值 0o377 // 255
十六進制 : 0x或0X的數(shù)值 0xff //255
二進制: 有前綴0b 或0B的數(shù)值 0b11 // 3
特殊字符 0
正零 和 負零
+ 0 === -0 //true
唯一區(qū)別: 坐分母時返回值不一樣
1/+0 // +Infinity 1/-0 //-Infinity 無窮
NaN
表示 非數(shù)字 數(shù)據(jù)類型是Number
0/0 // NaN
運算規(guī)則
- NaN不等于任何值呢诬,包括自身
- NaN 布爾運算是false
- NaN與任何值運算都是 NaN
- 數(shù)組的indexof方法內部使用的是嚴格相等運算符,該方法對NaN不成立
6. Boolean 字符串
概述:就是多個或單個拍在一起的字符放在單引號或雙引號中意敛。
- 單引號中使用多引號 雙引號中使用單引號
" ' ' " ' " " '
- 字符串默認寫在一行馅巷,分成多行會報錯
- 多行字符串寫法
var long ='long'
+ 'long'
+ 'string';
var long = 'long\
long\
string`;
轉義符
\0 :null(\u0000) \b :后退鍵(\u0008)
\f :換頁符(\u000C) \n :換行符(\u000A)
\r :回車鍵(\u000D) \t :制表符(\u0009)
\ v :垂直制表符(\u000B) \ ' :單引號(\u0027)
\ " :雙引號(\u0022) \ \ :反斜杠(\u005C)
length 屬性
返回字符串的長度,屬性無法改變
Base 64 轉碼
btoa() : 任意值轉為 Base64 編碼
atob(): Base64編碼轉為原來的值
7. 對象 Object
概述 ; 對象就是一組 "鍵值對" 的集合草姻,無序的復合數(shù)據(jù)類型
對象的每一個鍵名又稱為“屬性”(property)钓猬,它的“鍵值”可以是任何數(shù)據(jù)類型。如果一個屬性的值為函數(shù)撩独,通常把這個屬性稱為“方法”敞曹,它可以像函數(shù)那樣調用。
- 鍵名是數(shù)值综膀,自動轉為字符串
- 鍵名不符合標識符的條件澳迫,也不是數(shù)字,必須加引號剧劝。
- 鍵名 都是 屬性橄登,鍵值可以是任何數(shù)據(jù)類型
對象的引用
如果不同的變量名指向同一個對象,那么它們都是這個對象的引用,也就是說指向同一個內存地址拢锹。修改其中一個變量谣妻,會影響到其他所有變量。
如果取消某一個變量對于原對象的引用卒稳,不會影響到另一個變量
var o1 = {};
var o2 = o1;
o1 = 1;
o2 // {}
表達式還是語句
- 行首是大括號蹋半,一律解釋為代碼塊。
- 如果解釋為表達式充坑,在大括號外加上圓括號减江。
eval('{foo: 123}') // 123
eval('({foo: 123})') // {foo: 123}
如果沒有圓括號,eval將其理解為一個代碼塊捻爷;加上圓括號以后辈灼,就理解成一個對象。
屬性的操作
一種是使用點運算符役衡,還有一種是使用方括號運算符
var obj = {
p: 'Hello World'
};
obj.p // "Hello World"
obj['p'] // "Hello World"
- 如果使用方括號運算符茵休,鍵名必須放在引號里面薪棒,否則會被當作變量處理手蝎。
- 數(shù)字鍵可以不加引號,因為會自動轉成字符串
- 數(shù)值鍵名不能使用點運算符(因為會被當成小數(shù)點)俐芯,只能使用方括號運算符
屬性的賦值
點運算符棵介,還有一種是使用方括號運算符
var obj = {};
obj.foo = 'Hello';
obj['bar'] = 'World';
Object.keys 查看所有屬性
delete 命令 delete obj.width
delete命令用于刪除對象的屬性,刪除成功后返回true
- 刪除一個不存在的屬性吧史,delete不報錯邮辽,而且返回true
- 只有一種情況delete命令會返回false,那就是該屬性存在贸营,且不得刪除
- delete命令只能刪除對象本身的屬性吨述,無法刪除繼承的屬性
delete返回true,該屬性依然可能讀取到值 >>(繼承的屬性)
in 運算符
in運算符用于檢查對象是否包含某個屬性(注意钞脂,檢查的是鍵名揣云,不是鍵值),如果包含就返回true冰啃,否則返回false邓夕。
它不能識別哪些屬性是對象自身的,哪些屬性是繼承的阎毅。
var obj = { p: 1 };
'p' in obj // true
'toString' in obj // true
for…in 循環(huán)
for...in循環(huán)用來遍歷一個對象的全部屬性焚刚。
它遍歷的是對象所有可遍歷(enumerable)的屬性,會跳過不可遍歷的屬性扇调。
它不僅遍歷對象自身的屬性矿咕,還遍歷繼承的屬性。
with 語句 不推薦使用
with語句的格式如下:
with (對象) {
語句;
}
var obj = {
p1: 1,
p2: 2,
};
with (obj) {
p1 = 4;
p2 = 5;
}
// 等同于
obj.p1 = 4;
obj.p2 = 5;
如果with區(qū)塊內部有變量的賦值操作,必須是當前對象已經(jīng)存在的屬性碳柱,否則會創(chuàng)造一個當前作用域的全局變量雌团。