使用 eval 函数处理字符串表达式
var x = "5";
var y = "6";
var z = eval(x + y); // 返回11
使用全局变量
function add() {
sum = 0; // 没有使用 var 关键字,这将 sum 声明为全局变量
for (i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
嵌套太多层的回调函数
function doSomething(callback) {
setTimeout(function () {
callback();
}, 1000);
}
doSomething(function () {
setTimeout(function () {
console.log("Done!");
}, 2000);
});
手写加法函数
function add(a, b) {
return a + b;
}
负数判断,这个函数没有必要这么复杂,只需要使用一行代码:
function negative(num) {
if (num < 0 == false) {
return false;
} else {
return true;
}
}
function isNegative(num) {
return num < 0;
}
对象属性复制,这个函数没有考虑到对象的复杂性,例如它不能复制对象中的函数或非枚举属性。
function copyObject(obj) {
var newObj = {};
for (var prop in obj) {
newObj[prop] = obj[prop];
}
return newObj;
}
循环内的异步,这个代码段会输出 5 个 5,因为循环结束时,i 的值为 5,而 setTimeout 函数是异步的,它会在循环结束后延迟一秒钟才执行。
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}
使用循环来实现乘法,虽然这种方法可以实现乘法,但是它的性能非常低下,因为它需要进行循环运算,而不是使用内置的乘法运算符。
function multiply(num1, num2) {
let result = 0;
for (let i = 0; i < num2; i++) {
result += num1;
}
return result;
}
将数字转换为布尔值,虽然这种方法可以将数字转换为布尔值,但是它是多余的,因为 JS 中的数字自身就可以表示为布尔值。
const isNumberTrue = (num) => !!num;
使用对象字面量来代替 switch 语句,虽然这种方法可以实现 switch 语句的功能,但是它不够清晰和易于理解,尤其是在字面量对象中有很多键值对时。
const getValue = (key) => ({
'foo': 'bar',
'hello': 'world',
})[key];
将布尔值转换为数字,虽然这种方法可以将布尔值转换为数字,但是它也是多余的,因为 JS 中的布尔值可以被隐式转换为数字。
const convertToNumber = (val) => val ? 1 : 0;
这些代码示例可能会产生一些问题,例如难以调试、可读性差、变量名容易重复、全局变量污染等。仅供娱乐和展示目的,不建议在实际开发中使用。