ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021.06.16(传参数)

2021-06-16 11:34:08  阅读:137  来源: 互联网

标签:console log 16 undefined name person 参数 2021.06 const


函数传参和默认参数的区别,传参如果传的是引用地址,则会对这个引用产生影响,但是如果是默认参数,则是创建了一个新对象,对原引用没有影响。

const person = {
  name: "Lydia",
  age: 21
}

const changeAge = (x = { ...person }) => x.age += 1
const changeAgeAndName = (x = { ...person }) => {
  x.age += 1
  x.name = "Sarah"
}

changeAge(person)
changeAgeAndName()

console.log(person)

result: name:'Lydia‘, age:22

拓展运算符的熟悉程度,只有C选项是将数组变为了三个元素,其余选项均为一个数组

 

function sumValues(x, y, z) {
    return x + y + z;
}

 

sumValues(...[1, 2, 3])

可选连操作符(?.)

作用是如果该操作符前面的属性对象存在,则打印该属性对应的内容,如果不存在则返回undefined

const person = {
    firstName: "Lydia",
    lastName: "Hallie",
    pet: {
        name: "Mara",
        breed: "Dutch Tulip Hound"
    },
    getFullName() {
        return `${this.firstName} ${this.lastName}`;
    }
};

console.log(person.pet?.name);
console.log(person.pet?.family?.name);
console.log(person.getFullName?.());
console.log(member.getLastName?.());

result:Mara undefined Lydia Hallie ReferenceError

indexOf返回的下标

 

const groceries = ["banana", "apple", "peanuts"];

if (groceries.indexOf("banana")) {
    console.log("We have to buy bananas!");
} else {
    console.log(`We don't have to buy bananas!`);
}

 

result:We don't have to buy bananas!

indexOf返回的下标是0,这是一个假值,所以触发了else.

setter的认识

 

const config = {
    languages: [],
    set language(lang) {
        return this.languages.push(lang);
    }
};

console.log(config.language);

 

修改对象的属性,如果调用的话返回的是undefined。

 

 

这个方法存在的意义是修改对象的属性,如果调用的话返回的是undefined。

对象的解构赋值

 

const myFunc = ({ x, y, z }) => {
    console.log(x, y, z);
};

myFunc(1, 2, 3);

 

result:undefined undefined undefined

传入的应该是一个拥有x y z三个属性的对象,但是题目并未传入一个对象,所以打印的是3个undefined.

function sayHi(name) {
  return `Hi there, ${name}`
}

console.log(sayHi())

由于模板字符串中没有接收到name,所以返回的是undefined.

const person = {
  name: "Lydia",
  age: 21
}

let city = person.city
city = "Amsterdam"

console.log(person)

仔细想想并未对person对象添加任何属性

function checkAge(age) {
  if (age < 18) {
    const message = "Sorry, you're too young."
  } else {
    const message = "Yay! You're old enough!"
  }

  return message
}

console.log(checkAge(21))

result:挺坑的,意在考查const、let引起的块级作用域,由于块级作用域的存在,我们无法在块级作用域之外访问到声明的变量,请记住这个题。

for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1)
}

for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1)
}

result:333 和 012,因为JS的事件循环机制,setTimeout属于宏任务,要等到同步代码执行完之后才能执行,var在此处定义的是全局变量,因此同步代码执行完之后i已经变成了3,所以打印3个3,

但是let定义的变量会形成一个块级作用域,因此是0 1 2

箭头函数作用域问题

const shape = {
  radius: 10,
  diameter() {
    return this.radius * 2
  },
  perimeter: () => 2 * Math.PI * this.radius
}

shape.diameter()
shape.perimeter()

result:20和NaN,因为diameter中的this指的是shape中的radius,但是perimeter由于是箭头函数所以,当我们调用 perimeter 时,this 不是指向 shape 对象,而是它的周围作用域(在例子中是 window)。

 

2021-06-16  11:22:46

 

标签:console,log,16,undefined,name,person,参数,2021.06,const
来源: https://www.cnblogs.com/zhenggc99/p/14888672.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有