JavaScript基础测验解析 - 来自javascript-tutorial的技术问答

JavaScript基础测验解析 - 来自javascript-tutorial的技术问答

ru.javascript.info Современный учебник JavaScript ru.javascript.info 项目地址: https://gitcode.com/gh_mirrors/ru/ru.javascript.info

JavaScript作为一门动态语言,有许多独特的行为特性。本文将通过一系列测验题目,深入解析JavaScript的核心概念,帮助开发者更好地理解这门语言。

类型转换与运算

JavaScript中的类型转换常常让开发者感到困惑:

true + false // 结果是1

这是因为:

  • true被转换为数字1
  • false被转换为数字0
  • 1 + 0 = 1

另一个有趣的例子:

let a = 1;
let b = { toString() {return '1'} };
let c = 1;
a + b + c // 结果是"111"

这里发生了:

  1. a + b:数字1加对象,对象转为字符串"1",得到"11"
  2. 再加c:字符串"11"加数字1,得到"111"

变量与作用域

JavaScript的变量声明方式影响其作用域:

// var声明会变量提升
alert(str); // undefined
var str = "Hello";

// let声明不会提升
alert(str); // 报错
let str = "Hello";

循环中的变量声明也值得注意:

for (var i = 0; i < 10; i++) {
  setTimeout(function() { alert(i); }, 100);
}
// 输出10次10

for (let i = 0; i < 10; i++) {
  setTimeout(function() { alert(i); }, 100);
}
// 输出0到9

这是因为var没有块级作用域,而let有。

函数与this

JavaScript中函数的行为十分灵活:

function f() { return f; }
new F() instanceof F // false
new F() instanceof Function // true

当构造函数返回一个对象时,new表达式的结果就是这个对象,而不是新创建的对象。

this的绑定规则也很特殊:

let user = {
  sayHi: function() { alert(this); }
};

(user.sayBye = user.sayHi)(); // this是undefined

赋值操作会丢失原始的对象上下文。

对象与原型

JavaScript基于原型的继承机制:

function User() { }
User.prototype = { admin: false };

let user = new User();
User.prototype = { admin: true };

alert(user.admin); // 仍然是false

已创建的对象保持对原原型的引用,后续修改原型不会影响它们。

数组操作

JavaScript数组的特殊行为:

let arr = [];
arr[1] = 1;
arr[3] = 33;
arr.length // 4

数组的length是最大数字索引加1,中间未赋值的元素为empty。

错误处理

JavaScript的错误处理机制:

// 合法的throw语句
throw "Ошибка";
throw new Error("Ошибка");
throw { message: "Ошибка" };
throw Error("Ошибка");

任何值都可以作为异常抛出。

运算符优先级

逻辑运算符的短路特性:

0 || "" || 2 || undefined || true || falsе // 2
2 && 1 && null && 0 && undefined // null
0 || 1 && 2 || 3 // 2 (因为&&优先级高于||)

严格模式

严格模式下的不同行为:

"use strict";
a = null + undefined; // 报错,变量未声明

非严格模式下这会创建一个全局变量a。

总结

这些测验题目涵盖了JavaScript的许多核心概念,包括:

  • 类型转换规则
  • 变量作用域
  • 函数与this绑定
  • 原型继承
  • 运算符优先级
  • 错误处理
  • 严格模式

理解这些概念对于掌握JavaScript至关重要。每个看似奇怪的行为背后都有其设计原理,深入理解这些原理能帮助开发者写出更健壮的代码。

ru.javascript.info Современный учебник JavaScript ru.javascript.info 项目地址: https://gitcode.com/gh_mirrors/ru/ru.javascript.info

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焦习娜Samantha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值