写过一些看起来比较蠢的 JS 代码

使用 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;

 这些代码示例可能会产生一些问题,例如难以调试、可读性差、变量名容易重复、全局变量污染等。仅供娱乐和展示目的,不建议在实际开发中使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值