js中的运算符~

JavaScript015

js中的运算符~,第1张

规律很容易找到    -(x+1)

~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