javascript经典练习题-语法与特性
下面这段精心整理的内容,呈现了一系列丰富多样的练习题集,它们专注于JavaScript编程语言的两个核心方面——语法和特性。这些练习题旨在帮助学习者系统地巩固基础知识,并在实践中不断提升他们的JavaScript编程技能,从而为进一步探索和运用这门强大的编程语言奠定坚实的基础。
一、基础语法
函数返回值
若函数无明确返回值或调用无参 return,其返回值是?
答案: undefined
数字精度问题
var a = 111111111111111110000, b = 1111;
console.log(a + b);
答案: 111111111111111110000(因超出 2^53 精度范围,结果截断)
错误类型
错误分为语法错误和?
答案: 运行错误(异常)
二、函数与作用域
闭包应用
实现累加函数 addNum,每次调用返回累加结果:
var addNum = (function() {
let result = 0;
return function(num) { return result += num; };
})();
示例: addNum(10) → 10,addNum(12) → 22
this 指向
以下代码中 this 的指向是?
function test() { console.log(this); }
test();
答案: 全局对象(如 window 或 global)
箭头函数特性
箭头函数与普通函数的 this 区别是?
答案: 箭头函数无自身 this,继承外层上下文
三、对象与数组
数组去重
编写函数去重数组,返回新数组。
示例:
function unique(arr) { return [...new Set(arr)]; }
以下代码输出结果:
[1, 2, 3].map(x => x * 2);
[1, 2, 3].forEach(x => x * 2);
答案: [2, 4, 6] 和 undefined(forEach 无返回值)
四、进阶特性
arguments 对象
关于 arguments 的描述错误的是?
答案: arguments 是标准数组(实际为类数组对象)
with 语句作用
with 语句主要用于?
答案: 临时扩展作用域链(通常不推荐使用)
数组方法 reverse
调用 [].reverse() 的返回值是?
答案: 原数组的引用(若空数组则为 [])
五、编程题
模块化
创建两个文件,一个是模块文件,导出一个函数,另一个文件导入这个模块并使用该函数。
module.js (模块文件)
export function add(a, b) {
return a + b;
}
main.js (主文件)
import { add } from './module.js';
console.log(add(5, 3)); // 输出: 8
解构赋值
使用解构赋值从数组和对象中提取值,并输出结果。
// 数组解构
const arr = [1, 2, 3];
const [first, second] = arr;
console.log(first, second); // 输出: 1 2
// 对象解构
const obj = {x: 10, y: 20};
const {x, y} = obj;
console.log(x, y); // 输出: 10 20
Promise使用
编写一个返回 Promise 的函数,该函数模拟网络请求,成功后返回一个字符串,失败时返回一个错误。
javascript
function fetchData(success = true) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (success) {
resolve("成功获取数据!");
} else {
reject("获取数据失败!");
}
}, 1000);
});
}
// 使用
fetchData().then(console.log).catch(console.error); // 输出: "成功获取数据!"
回文字符串判断
编写函数判断字符串是否为回文:
function isPalindrome(str) {
return str === str.split('').reverse().join('');
}
示例: “madam” → true
斐波那契数列
计算第 n 项斐波那契数:
function fibonacci(n) {
return n <= 1 ? n : fibonacci(n-1) + fibonacci(n-2);
}