相关疑难解决方法(0)

测试值是奇数还是偶数

我决定用一个非常简单的算法创建简单的isEvenisOdd函数:

function isEven(n) {
  n = Number(n);
  return n === 0 || !!(n && !(n%2));
}

function isOdd(n) {
  return isEven(Number(n) + 1);
}
Run Code Online (Sandbox Code Playgroud)

如果n具有某些参数,则可以,但在许多情况下都会失败.所以我开始创建强大的函数,为尽可能多的场景提供正确的结果,这样只测试javascript数量限制内的整数,其他一切都返回false(包括+和 - 无穷大).注意零是偶数.

// Returns true if:
//
//    n is an integer that is evenly divisible by 2
//
// Zero (+/-0) is even
// Returns false if n is not an integer, not even or NaN
// Guard against empty string

(function (global) {

  function basicTests(n) {

    // Deal with …
Run Code Online (Sandbox Code Playgroud)

javascript numbers

159
推荐指数
6
解决办法
32万
查看次数

为什么扩展本机对象是一种不好的做法?

每个JS意见领袖都说扩展原生对象是一种不好的做法.但为什么?我们是否获得了性能?他们是否害怕有人以"错误的方式"做到这一点,并添加了可枚举的类型Object,几乎破坏了任何对象上的所有循环?

TJ Holowaychukshould.js为例.他增加了一个简单的getterObject,一切工作正常(来源).

Object.defineProperty(Object.prototype, 'should', {
  set: function(){},
  get: function(){
    return new Assertion(Object(this).valueOf());
  },
  configurable: true
});
Run Code Online (Sandbox Code Playgroud)

这真的很有道理.例如,可以扩展Array.

Array.defineProperty(Array.prototype, "remove", {
  set: function(){},
  get: function(){
    return removeArrayElement.bind(this);
  }
});
var arr = [0, 1, 2, 3, 4];
arr.remove(3);
Run Code Online (Sandbox Code Playgroud)

是否有任何反对扩展本机类型的论据?

javascript prototype prototypal-inheritance

121
推荐指数
7
解决办法
3万
查看次数

检查奇数,无需模运算符

我正在创建一个函数,返回传入的数字是否为奇数没有模运算符.棘手的部分是它应该适用于负数和零.

到目前为止这是我的代码:

function testodd(num) {
  return (num/2)*2==num;
}

var output = testodd(17);
console.log(output); // --> true
Run Code Online (Sandbox Code Playgroud)

我在这里犯了一些错误吗?或者有更好的方法吗?

javascript

2
推荐指数
2
解决办法
2564
查看次数