~5=-6
百度了很多文章,基本都只是说 按位取反 ,然后自己算了一下
例如 1 二进制为00000001 取反后 11111110 明显不对
其实不是这样子算的,因为 有符号数 是以 补码 的形式存储的
(当然,js中只有一种数字类型,64位浮点格式)
1在计算机中的值: 0000001(正数的原、反、补是一样的)
取反后: 11111110(这是一个负数,反码=补码+1)
补码: 11111101(那么补码=反码-1)
原码: 10000010(十进制为-2)
那么有什么用呢?
目前,我看到的是
~~ 转换成数字并且把小数点去掉 效率比Math.floor高
!!~ 判断一个数是否大于0 大于0 返回true 小于0返回false
这里也就大致讲个明白,如果有错,请指出,谨防误导他人
在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 “object”。这就需要用到instanceof来检测某个对象是不是另一个对象的实例。另外,更重的一点是 instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型。
例如:
function Foo(){}
Foo.prototype = new Aoo()//JavaScript 原型继承
var foo = new Foo()
console.log(foo instanceof Foo)//true
console.log(foo instanceof Aoo)//true
上面的代码中是判断了一层继承关系中的父类,在多层继承关系中,instanceof 运算符同样适用。
又如:
console.log(Object instanceof Object)//true
console.log(Function instanceof Function)//true console.log(Number instanceof Number)//false
console.log(String instanceof String)//false
console.log(Function instanceof Object)//true
console.log(Foo instanceof Function)//true
console.log(Foo instanceof Foo)//false