JavaScript 入門(新)


//不會一個個知識點的記筆記,只去記錄一些比較坑的點或者比較特別的點

1、三個基本概念(變量、值、類型)

       *變量沒有類型,值有類型

2、變量聲明關鍵詞:

                let ,

              var,

              const(使用const時,會使變量和值之間的引用關係不能再改變。而js中的原子值無法改變)

3、類型:7種(symbol ,null ,undefined ,number ,string ,object(非原子類型) , boolean )

4、typrof :查看變量類型

typeof 的三種例外:

       null:object

       被聲明,未賦值,undefined

       typeofa(未被聲明的,不會報錯,只會返回undefined)

 

5、number(8個字節,64位)     

控制有效位

toFixed()//小數點後

              toPrecision()//有效位

       //一個奇怪的地方0.1+0.2(可以用Number.EPSILON)

       NaN(不與任何值相等,包括自己

       Number.MAX_VALUE(當超過後,會靠近最接近的數)

       Infinity(無窮大)

       +0-0(如何區分;==0&&/Ifinity==Infinity

       Object.is(a,b)//甚至可以區分0,-0,NaN

eg:var a = NaN,

      b = NaN;

console.log(Object.is(a, b))

判斷整數:Number.isInteger(61)//判斷一個數是不是整數

6、String類型(16個無符號整形)

       一些方法:

              concat:連接

              indexOf:返回一個子字符串

              charAt:獲取指定位置的字符

                     []簡寫模式

              length:長度

              toUpperCase:大寫

       聲明後,就不再改變//變了,就不是自己了

       使用雙引號

              轉義:\

                '""'

              模板字符串(不需要轉義):`` 

let a='dads\nfdf'
let b=`dadas
fas`

使用變量: ${a+b}

let c=`我想要知道${a+b}`

 

7、object類型

       1)創建 

對象字面量、constructor

對象字面量

    let o={
    name:'da',
    age:18
}

constructor

let o =new Object()

o.name=’malin’

o.age=18

       2)訪問value 

obj.key//點操作符    

obj[key] //括號

//第二種使用更廣一些,比如key中間有空格,但是囉嗦

       3)刪除 delete

       4)ES6中提供更簡單的方式

 letname = 'nalin'

       letage = 11

       letperson = {

      name,

        age

       }

       console.log(person)

8、build-in object(boolean string number)//封裝好的原生方法

**使用constructor,絕大多數都需要new

**自動裝箱、自動拆箱

       如果build-in不加new時,實現強制類型轉換

1)封裝了boolean的object的一個奇怪特性,object是一種像是真的值,取反會變成假

let a = new Boolean(false)

if (!a) {

   console.log(1111);

 

} else {

    console.log(222222);

}

9、array

1)創建

var a = [0, 1]

a[3] = 1

console.log(a)//會有空洞

2)方法:push

       pop

       unshift

       shift

       splice(a,b)//刪了a-b之間的東西

splice(a,b,‘a’,‘da’)//刪了a-b之間的東西,然後把後面的添加進去(如果放入的數據多於刪掉的,會將之後的佔用)

       slice(a,b)切片

       length:改變length可以截斷數組

強制類型轉換後爲false:共6種

“N0fun”

N:NaN

0:

false:

undefined:

n:null

""

 

####################################################################################################################################

array的一些方法:

       poppush

       shuiftunshift

       splice:刪除  

       slice(start,end)

              複製數組:ab=a.slice()

一些build_in objects

function

  1)創建:

       聲明: function fun(){}

       函數表達式:var f=function(){}

       箭頭函數:()=>{}

       new(不建議用)

      

       函數聲明:

              參數:各種奇怪,

                     可選

       函數表達式:函數名可選

       箭頭函數:

              參數爲一:括號變成可選

 

let person={

   say(){

       console.log('hello')

    }

}

10、symbol類型:(提供一種與存儲無關的方式來表達一個符號)

       動機:爲對象加入 private屬性

創建:

       let  my=Symbol('sdada');不需要,也不能使用new

              返回的是原子類型,而不是

  letmys=Symbbol('dada')

       letmobj=Object(mys)

       letobj={}

       obj[my]='dadadas'

使用:symbol1==symbol     symbol1!=symbol2(兩次調用,不可能返回同一個值)

共享 symbol 類型的值

       es6全局註冊表

       lets=Symbol.for('sdada')//查找是否存在,存在?不存在就創建

 

 

 

11、prototype:原型

每個obj關聯僅關聯一個Prototype

prototype本身必須是一個object或者null

內部狀態:放在一個槽中

對象之間通過原型關係,形成原型鏈

一個object包含:

三部分 :

       properties:完全控制權

       internalslots:內部槽  (無法增加或減少槽數,但是可以改變)

       internalmethods:(無法改變

原型鏈:

       創建時關聯:

              letobj=Object.create(proto)

       創建後關聯:

              Object.setPrototypeOf(obj,proto)

 

優點:動態性更強//像其他語言的繼承,可以具有多態性***但是不可以重載

 

如何查找key:向上查找,沒有的話,返回undefined

 

 

12、變量作用域:

程序主函數

Global object(全部對象)

       NaN,undefined都是一個key

全局對象:

值屬性:Infinity,NaN ,undefined…

函數屬性:isNaN(number),eval(x),parseFloat(string) …

構造函數屬性:Array,Boolean, String, Number…

其他屬性:Math,JSON…

邪惡特性:

       全局(如果聲明變量的時候,什麼都不用)

       全局變量不是變量

解決方法:

       "usestrict";

        a=1

        console.log('hello')

變量作用域:

       var函數作用域

//微編譯

變量提升(只把聲明提升到最前面)

局部變量會這樣,函數也會這樣

****變量提升只提升函數名 而函數提升會提升整個函數體 注意:函數提升在變量提升上面。


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