js 学习 【二】

function bark() {

console.log(‘Woof!’)

}

bark.animal = ‘dog’

答案: A

这在 JavaScript 中是可以的,因为函数是对象!(除了基本类型之外其他都是对象)

函数是一个特殊的对象。你写的这个代码其实不是一个实际的函数。函数是一个拥有属性的对象,并且属性也可被调用。

输出是什么?

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());

A: TypeError

B: SyntaxError

C: Lydia Hallie

D: undefined undefined

答案: A

你不能像常规对象那样,给构造函数添加属性。如果你想一次性给所有实例添加特性,你应该使用原型。因此本例中,使用如下方式

Person.prototype.getFullName = function () {

return ${this.firstName} ${this.lastName};

}

这才会使 member.getFullName() 起作用。为什么这么做有益的?假设我们将这个方法添加到构造函数本身里。也许不是每个 Person 实例都需要这个方法。这将浪费大量内存空间,因为它们仍然具有该属性,这将占用每个实例的内存空间。相反,如果我们只将它添加到原型中,那么它只存在于内存中的一个位置,但是所有实例都可以访问它!

输出是什么?

function Person(firstName, lastName) {

this.firstName = firstName

this.lastName = lastName

}

const lydia = new Person(‘Lydia’, ‘Hallie’)

const sarah = Person(‘Sarah’, ‘Smith’)

console.log(lydia)

console.log(sarah)

A: Person {firstName: “Lydia”, lastName: “Hallie”} and undefined

B: Person {firstName: “Lydia”, lastName: “Hallie”} and Person {firstName: “Sarah”, lastName: “Smith”}

C: Person {firstName: “Lydia”, lastName: “Hallie”} and {}

D:Person {firstName: “Lydia”, lastName: “Hallie”} and ReferenceError

答案: A

对于 sarah,我们没有使用 new 关键字。当使用 new 时,this 引用我们创建的空对象。当未使用 new 时,this 引用的是全局对象(global object)。

我们说 this.firstName 等于 “Sarah”,并且 this.lastName 等于 “Smith”。实际上我们做的是,定义了 global.firstName = ‘Sarah’ 和 global.lastName = ‘Smith’。而 sarah 本身是 undefined。

所有对象都有原型

A: true

B: false

答案: B

除了基本对象(base object),所有对象都有原型。基本对象可以访问一些方法和属性,比如 .toString。这就是为什么你可以使用内置的 JavaScript 方法!所有这些方法在原型上都是可用的。虽然 JavaScript 不能直接在对象上找到这些方法,但 JavaScript 会沿着原型链找到它们,以便于你使用。

输出是什么?

function sum(a, b) {

return a + b

}

sum(1, ‘2’)

  • A: NaN

  • B: TypeError

  • C: "12"

  • D: 3

答案: C

JavaScript 是一种动态类型语言:我们不指定某些变量的类型。值可以在你不知道的情况下自动转换成另一种类型,这种类型称为隐式类型转换(implicit type coercion)。Coercion 是指将一种类型转换为另一种类型。

在本例中,JavaScript 将数字 1 转换为字符串,以便函数有意义并返回一个值。在数字类型(1)和字符串类型('2')相加时,该数字被视为字符串。我们可以连接字符串,比如 "Hello" + "World",这里发生的是 "1" + "2",它返回 "12"

输出是什么?

let number = 0

console.log(number++)

console.log(++number)

console.log(number)

  • A: 1 1 2

  • B: 1 2 2

  • C: 0 2 2

  • D: 0 1 2

答案: C

一元后自增运算符 ++

返回值(返回 0

值自增(number 现在是 1

值自增(number 现在是 2

返回值(返回 2

输出是什么?

function getPersonInfo(one, two, three) {

console.log(one)

console.log(two)

console.log(three)

}

const person = ‘Lydia’

const age = 21

getPersonInfo${person} is ${age} years old

  • A: "Lydia" 21 ["", " is ", " years old"]

  • B: ["", " is ", " years old"] "Lydia" 21

  • C: "Lydia" ["", " is ", " years old"] 21

答案: B

如果使用标记模板字面量,第一个参数的值总是包含字符串的数组。其余的参数获取的是传递的表达式的值!

输出是什么?

function checkAge(data) {

if (data === { age: 18 }) {

console.log(‘You are an adult!’)

} else if (data == { age: 18 }) {

console.log(‘You are still an adult.’)

} else {

console.log(Hmm.. You don't have an age I guess)

}

}

checkAge({ age: 18 })

  • ​​​​​​A: You are an adult!

  • B: You are still an adult.

  • C: Hmm.. You don't have an age I guess

答案: C

在测试相等性时,基本类型通过它们的值(value)进行比较,而对象通过它们的引用(reference)进行比较。JavaScript 检查对象是否具有对内存中相同位置的引用。

题目中我们正在比较的两个对象不是同一个引用:作为参数传递的对象引用的内存位置,与用于判断相等的对象所引用的内存位置并不同。

这也是 { age: 18 } === { age: 18 } 和 { age: 18 } == { age: 18 } 都返回 false 的原因。

输出是什么?

function getAge(…args) {

console.log(typeof args)

}

getAge(21)

  • A: "number"

  • B: "array"

  • C: "object"

  • D: "NaN"

答案: C

扩展运算符(...args)会返回实参组成的数组。而数组是对象,因此 typeof args 返回 "object"

最后

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

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

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

img

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

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

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

[外链图片转存中…(img-77CfJ4Mi-1715539285955)]

[外链图片转存中…(img-tZR4fBJQ-1715539285956)]

[外链图片转存中…(img-80nRdR9W-1715539285956)]

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值