1. 程式人生 > 其它 >2021.06.16(practice)

2021.06.16(practice)

+true;
!"Lydia";

result:+號會將true變為1,+號傾向於返回一個值,但是!傾向於返回一個布林值,因為"Lydia"是真實存在的,所以取反之後是false。

const bird = {
  size: 'small'
}
const mouse = {
  name: 'Mickey',
  small: true
}

result:因為mouse通過點的形式呼叫bird的前提是mouse有這個屬性,但是它沒有,所以是無效的,但是bird.size是真實存在的,通過[]呼叫裡面存放的是small這個字串

let c = { greeting: 'Hey!' }
let d

d 
= c c.greeting = 'Hello' console.log(d.greeting)

result:輸出是 'Hello',因為在JS中物件是一種引用型別,d和c指向的是同一片記憶體區域,所以對c進行修改,d指向的內容也發生了改變。

let a = 3
let b = new Number(3)
let c = 3

console.log(a == b)
console.log(a === b)
console.log(b === c)

reuslt:輸出是 true、false、false。之所以是這樣,當我們是用==符號時,系統會檢測兩邊是否有相同的值,有時候還會對值進行轉換的比較,但是如果我們使用===符號時,不僅要求兩邊要有相同的值,還要求有相同的型別,new Number出來的是一種物件,其身上不僅僅有值,還有一堆額外的功能。

class Chameleon {
  static colorChange(newColor) {
    this.newColor = newColor
    return this.newColor
  }

  constructor({ newColor = 'green' } = {}) {
    this.newColor = newColor
  }
}

const freddie = new Chameleon({ newColor: 'purple' })
freddie.colorChange('orange')

result:輸出是TypeError,之所以是錯誤,原因在於Chameleon是一個類,colorChange是類中的靜態方法,類中的靜態方法只能被構造器使用,不能被例項進行呼叫。

let greeting
greetign = {} // Typo!
console.log(greetign)

result:輸出的是{},表面上看greetign存在拼寫錯誤,應該報錯才對,但是這是在全域性作用域下的,實際上是進行了賦值的,所以打印出的是{}.

function bark() {
  console.log('Woof!')
}

bark.animal = 'dog'

result:正常執行!之所以會這樣,是因為JS中的函式也是一類特殊的物件,所以也可以通過點的形式新增屬性。

function Person(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}

const member = new Person("Lydia", "Hallie");
Person.getFullName = function () {
  return `${this.firstName} ${this.lastName}`;
}

console.log(member.getFullName());

result:TyprError Person是一個建構函式,不能像普通的物件給建構函式新增屬性,要想給建構函式的例項新增屬性,可以通過原型的方式來實現。

DOM事件流的三個階段分別是事件捕獲階段、處於目標階段、事件冒泡階段。事件捕獲的三個階段圖示:

2021-06-17 09:32:58