本文主要是奇舞前端特訓營的筆記
https://t.75team.com/video前端
變量聲明的三種方法mysql
1.var-聲明一個變量,可選擇將其初始化爲一個值sql
- 不支持塊級做用域 - var存在變量提高
console.log(a === undefined) //true var a = 10;
2.let-聲明一個塊級做用域變量,可選擇將其初始化一個值瀏覽器
- 塊級做用域
{ let x = 10; } console.log(typeof x); //undefined
- 同一做用域中不容許重複聲明 - 暫存死區 - 循環中的let做用域 - 瀏覽器兼容性
3.const-聲明一個只讀的常量 綁定的值不能夠再次改變ide
ECMAScript語言中全部的值都有一個對應的語言類型。ECMAScript語言類型包括Undefined、Null、Boolean、String、Number和Object。
對語言引擎和開發人員來講,類型是值的內部特徵,它定義了值的行爲,以使其區別於其餘值this
JavaScript有七種內置類型:spa
空值(null
)
未定義(undefined
)
布爾值( boolean
)
數字(number
)
字符串(string
)
對象(object
)
符號(symbol
,ES6中新增)
除對象以外,其餘統稱爲「基本類型」。prototype
Boolean
值:true和false
須要注意:0,"", null, undefined, 會被隱式的轉化爲false,其餘都爲truecode
建議採用嚴格比較,能夠經過!!將非boolean轉化爲booleansqlite
比較操做符總會返回boolean
布爾操做符&&和||不會轉化類型
&&和||具備短路特性
console.log(null !== undefined, null == undefined); //true, true console.log(1 && 2) //2
Number
數值範圍
整數-2^53~2^53
超事後會有精度丟失
小數精度Number.EPSILON
Infinity, Number.MAX_VALUE, Number.MIN_VALUE
浮點數精度問題console.log(0.2+0.4) //0.6000000000000001
限制精度
console.log((0.2+0.4).toFixed(2)); // 0.60
String
引號規範和轉義
建議使用單引號
字符串類型轉換console.log('1'+2, '2'-1);//'12', 1 隱式類型轉化
字符串模版
Object
對象是個引用類型
值類型和包裝類型
包裝類型typeof是object
對象的copy
let conf = { adapter: 'sqlite', db: { aqlite: { name: 'xxx.sqlite' }, mysql: { name: 'xxx', username: 'work', passwd: '***' } } } // ES6淺拷貝 let copied = Object.assign({}, conf); copied.adapter = 'mySql'; console.log(conf.adapter); //sqlite console.log(copied.adapter); //mySql copied.db.mySql.name = 'yyy.sqlite'; console.log(conf.db.mySql.name); //yyy.sqlite // 深拷貝 function deepCopy(des, src){ for( var key in src){ let prop = src[key]; if(typeof prop === 'object'){ des[key] = des[key] || {}; // typeof{} === object deepCopy(des[key], src[key]); }else { des[key] = src[key]; } } return des; } let deepCopied = deepCopy({}, conf); deepCopied.db.sqlite.name = 'zzz.sqlite'; // 深拷貝 console.log(deepCopied.db.sqlite.name, conf.db.sqlite.name);//'zzz.sqlite, yyy.sqlite'
new和constructor
new是一種語法糖
prototype
//原型鏈 // __proto__暴力構建原型鏈 var a = {x: 1},b = {y: 2}, c = {z: 3}; b.__proto__ = a; c.__proto__ = b; console.log(c); // 使用Object.create(a)構建原型鏈 var a = {x: 1}; var b = Object.create(a); b.y = 2; var c = Object.create(b); c.z = 3; console.log(c); // 使用構造器構建原型鏈 function A(){ this.x = 1; } function B(){ this.y = 2; } B.prototype = new A(); function C(){ this.z = 3; } C.prototype = new B(); var c = new C(); console.log(c); // 三種方式都是構建原型鏈
一張圖片有助於理解