js 学习 【一】

}

shape.diameter()

shape.perimeter() //20 and NaN

注意 diameter 的值是一个常规函数,但是 perimeter 的值是一个箭头函数。

对于箭头函数,this 关键字指向的是它当前周围作用域(简单来说是包含箭头函数的常规函数,如果没有常规函数的话就是全局对象),这个行为和常规函数不同。这意味着当我们调用 perimeter 时,this 不是指向 shape 对象,而是它的周围作用域(在例子中是 window)。

在 window 中没有 radius 这个属性,因此返回 undefined。

输出是什么?

+true;

!“Lydia”;

//1 and false

一元操作符加号尝试将 bool 转为 number。true 转换为 number 的话为 1,false 为 0。

字符串 ‘Lydia’ 是一个真值,真值取反那么就返回 false。

哪一个是无效的?

const bird = {

size: ‘small’

}

const mouse = {

name: ‘Mickey’,

small: true

}

A: mouse.bird.size

B: mouse[bird.size]

C: mouse[bird[“size”]]

D: All of them are valid

//A: mouse.bird.size

在 JavaScript 中,所有对象的 keys 都是字符串(除非对象是 Symbol)。尽管我们可能不会定义它们为字符串,但它们在底层总会被转换为字符串。

当我们使用括号语法时([]),JavaScript 会解释(或者 unboxes)语句。它首先看到第一个开始括号 [ 并继续前进直到找到结束括号 ]。只有这样,它才会计算语句的值。

mouse[bird.size]:首先计算 bird.size,这会得到 small。mouse[“small”] 返回 true。

然后使用点语法的话,上面这一切都不会发生。mouse 没有 bird 这个 key,这也就意味着 mouse.bird 是 undefined。然后当我们使用点语法 mouse.bird.size 时,因为 mouse.bird 是 undefined,这也就变成了 undefined.size。这个行为是无效的,并且会抛出一个错误类似 Cannot read property “size” of undefined。

输出什么?

console.log(Number(2) === Number(2))

console.log(Boolean(false) === Boolean(false))

console.log(Symbol(‘foo’) === Symbol(‘foo’))

  • A: truetruefalse

  • B: falsetruefalse

  • C: truefalsetrue

  • D: truetruetrue

每个Symbol都是完全唯一的。传递给Symbol的参数只是给Symbol的一个描述。 Symbol的值不依赖于传递的参数。 当我们测试相等时,我们创建了两个全新的符号:第一个Symbol('foo'),第二个Symbol('foo'), 这两个值是唯一的,彼此不相等,因此返回false

以下是个纯函数么?

function sum(a, b) {

return a + b;

}

  • A: Yes

  • B: No

答案: A

纯函数一种若输入参数相同,则永远会得到相同输出的函数。

sum函数总是返回相同的结果。 如果我们传递12,它将总是返回3而没有副作用。 如果我们传递510,它将总是返回15,依此类推,这是纯函数的定义。

输出什么?

const myLifeSummedUp = [“☕”, “?”, “?”, “?”]

for (let item in myLifeSummedUp) {

console.log(item)

}

for (let item of myLifeSummedUp) {

console.log(item)

}

  • A: 0 1 2 3 and "☕" "?" "?" "?"

  • B: "☕" "?" "?" "?" and "☕" "?" "?" "?"

  • C: "☕" "?" "?" "?" and 0 1 2 3

  • D: 0 1 2 3 and {0: "☕", 1: "?", 2: "?", 3: "?"}

答案: A

通过for-in循环,我们可以遍历一个对象自有的继承的可枚举的非Symbol的属性。 在数组中,可枚举属性是数组元素的“键”, 即它们的索引。 类似于下面这个对象:

{0: "☕", 1: "?", 2: "?", 3: "?"}

其中键则是可枚举属性,因此 0123被记录。

通过for-of循环,我们可以迭代可迭代对象(包括 ArrayMapSetStringarguments等)。当我们迭代数组时,在每次迭代中,不同属性的值将被分配给变量item, 因此“☕”“?”“?”“?”被打印。

输出什么?

const list = [1 + 2, 1 * 2, 1 / 2]

console.log(list)

  • A: ["1 + 2", "1 * 2", "1 / 2"]

  • B: ["12", 2, 0.5]

  • C: [3, 2, 0.5]

  • D: [1, 1, 1]

答案: C

数组元素可以包含任何值。 数字,字符串,布尔值,对象,数组,nullundeifned, 以及其他表达式,如日期,函数和计算。

元素将等于返回的值。 1 + 2返回31 * 2返回’2,'1 / 2返回0.5

输出什么?

function sayHi(name) {

return Hi there, ${name}

}

console.log(sayHi())

  • A: Hi there,

  • B: Hi there, undefined

  • C: Hi there, null

  • D: ReferenceError

答案: B

默认情况下,如果不给函数传参,参数的值将为undefined。 上述情况,我们没有给参数name传值。 name等于undefined,并被打印。

在ES6中,我们可以使用默认参数覆盖此默认的undefined值。 例如:

function sayHi(name =“Lydia”){...}

在这种情况下,如果我们没有传递值或者如果我们传递undefinedname总是等于字符串Lydia

输出什么?

const person = {

name: “Lydia”,

age: 21

}

let city = person.city

city = “Amsterdam”

console.log(person)

  • A: { name: "Lydia", age: 21 }

  • B: { name: "Lydia", age: 21, city: "Amsterdam" }

  • C: { name: "Lydia", age: 21, city: undefined }

  • D: "Amsterdam"

答案: A

我们将变量city设置为等于person对象上名为city的属性的值。 这个对象上没有名为city的属性,因此变量city的值为undefined

请注意,我们没有引用person对象本身,只是将变量city设置为等于person对象上city属性的当前值。

然后,我们将city设置为等于字符串“Amsterdam”。 这不会更改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))

  • A: "Sorry, you're too young."

  • B: "Yay! You're old enough!"

  • C: ReferenceError

  • D: undefined

答案: C

constlet声明的变量是具有块级作用域的,块是大括号({})之间的任何东西, 即上述情况if / else语句的花括号。 由于块级作用域,我们无法在声明的块之外引用变量,因此抛出ReferenceError

输出什么?

console.log(“I want pizza”[0])

  • A: """

  • B: "I"

  • C: SyntaxError

  • D: undefined

答案: B

可以使用方括号表示法获取字符串中特定索引的字符,字符串中的第一个字符具有索引0,依此类推。 在这种情况下,我们想要得到索引为0的元素,字符'I'被记录。

请注意,IE7及更低版本不支持此方法。 在这种情况下,应该使用.charAt()

输出什么?

function sum(num1, num2 = num1) {

console.log(num1 + num2)

}

sum(10)

  • A: NaN

  • B: 20

  • C: ReferenceError

  • D: undefined

答案: B

您可以将默认参数的值设置为函数的另一个参数,只要另一个参数定义在其之前即可。 我们将值10传递给sum函数。 如果sum函数只接收1个参数,则意味着没有传递num2的值,这种情况下,num1的值等于传递的值10。 num2的默认值是num1的值,即10。 num1 + num2返回20

如果您尝试将默认参数的值设置为后面定义的参数,则可能导致参数的值尚未初始化,从而引发错误。比如:

function test(m = n, n = 2) {

console.log(m, n)

}

test() // Uncaught ReferenceError: Cannot access ‘n’ before initialization

test(3) // 3 2

test(3, 4) // 3 4

输出什么?

let newList = [1, 2, 3].push(4)

console.log(newList.push(5))

  • A: [1, 2, 3, 4, 5]

  • B: [1, 2, 3, 5]

  • C: [1, 2, 3, 4]

  • D: Error

答案: D

.push方法返回数组的长度,而不是数组本身! 通过将newList设置为[1,2,3].push(4),实际上newList等于数组的新长度:4

然后,尝试在newList上使用.push方法。 由于newList是数值4,抛出TypeError。

输出什么?

function giveLydiaPizza() {

return “Here is pizza!”

}

const giveLydiaChocolate = () => “Here’s chocolate… now go hit the gym already.”

console.log(giveLydiaPizza.prototype)

console.log(giveLydiaChocolate.prototype)

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-qmaGmBsk-1715539252522)]

[外链图片转存中…(img-jc5BKecb-1715539252522)]

[外链图片转存中…(img-ZOi4X4mN-1715539252523)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 27
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值