JS按位非(~)運(yùn)算符與~~運(yùn)算符的理解分析
更新時(shí)間:2011年07月31日 23:43:10 作者:
按位非運(yùn)算符,簡(jiǎn)單的理解就是改變運(yùn)算數(shù)的符號(hào)并減去1,當(dāng)然,這是只是簡(jiǎn)單的理解能轉(zhuǎn)換成number類型的數(shù)據(jù)
那么,對(duì)于typeof var!==”number”的類型來(lái)說(shuō),進(jìn)行運(yùn)算時(shí),會(huì)嘗試轉(zhuǎn)化成32位整形數(shù)據(jù),如果無(wú)法轉(zhuǎn)換成整形數(shù)據(jù),就轉(zhuǎn)換為NaN;
JS在位運(yùn)算上用了更簡(jiǎn)便的一種方法來(lái)實(shí)現(xiàn)這中運(yùn)算,那么它的實(shí)現(xiàn)原理大致上可以這樣理解:
var testData=-2.9;
var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?-Math.floor(testData)-1:-Math.ceil(testData)-1:-1;
首先,如果一個(gè)數(shù)據(jù)在嘗試轉(zhuǎn)換為32整形數(shù)據(jù)時(shí),結(jié)果<0,那么就需要對(duì)其上舍入,比如-2.9->-2,如果>0,對(duì)其下舍入,比如:2.6->2;
一個(gè)數(shù)據(jù)如果不能轉(zhuǎn)換為32位二進(jìn)制表示,就轉(zhuǎn)換為NaN;繼而轉(zhuǎn)為-1;比如~{}/~NaN ==-1;
又比如~function(){return 100;}->-1;
在Jquery里面,有用到比如if(!~this.className.indexOf(str)){ //do some thing…..};這里,對(duì)于this.className.indexOf(str)的返回值,要么大于-1,要么就是等于-1;在其等于-1的時(shí)候,~-1===0;然后,!~-1===true;那么就可以得出this不包含str這個(gè)class名…;
對(duì)于~~運(yùn)算符,同理,它也可以表示為:
var testData=2.1;
var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?Math.floor(testData):Math.ceil(testData):0;
同樣采用上下舍入的方式來(lái)理解;
JS在位運(yùn)算上用了更簡(jiǎn)便的一種方法來(lái)實(shí)現(xiàn)這中運(yùn)算,那么它的實(shí)現(xiàn)原理大致上可以這樣理解:
復(fù)制代碼 代碼如下:
var testData=-2.9;
var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?-Math.floor(testData)-1:-Math.ceil(testData)-1:-1;
首先,如果一個(gè)數(shù)據(jù)在嘗試轉(zhuǎn)換為32整形數(shù)據(jù)時(shí),結(jié)果<0,那么就需要對(duì)其上舍入,比如-2.9->-2,如果>0,對(duì)其下舍入,比如:2.6->2;
一個(gè)數(shù)據(jù)如果不能轉(zhuǎn)換為32位二進(jìn)制表示,就轉(zhuǎn)換為NaN;繼而轉(zhuǎn)為-1;比如~{}/~NaN ==-1;
又比如~function(){return 100;}->-1;
在Jquery里面,有用到比如if(!~this.className.indexOf(str)){ //do some thing…..};這里,對(duì)于this.className.indexOf(str)的返回值,要么大于-1,要么就是等于-1;在其等于-1的時(shí)候,~-1===0;然后,!~-1===true;那么就可以得出this不包含str這個(gè)class名…;
對(duì)于~~運(yùn)算符,同理,它也可以表示為:
復(fù)制代碼 代碼如下:
var testData=2.1;
var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?Math.floor(testData):Math.ceil(testData):0;
同樣采用上下舍入的方式來(lái)理解;
您可能感興趣的文章:
- js 與或運(yùn)算符 || && 妙用
- js中的 || 與 && 運(yùn)算符詳解
- javascript三元運(yùn)算符用法實(shí)例
- javascript typeof的用法與typeof運(yùn)算符介紹[詳細(xì)]
- Javascript 按位取反運(yùn)算符 (~)
- JS中三目運(yùn)算符和if else的區(qū)別分析與示例
- 詳解js運(yùn)算符單豎杠“|”與“||”的用法和作用介紹
- 教你JS中的運(yùn)算符乘方、開方及變量格式轉(zhuǎn)換
- Javascript 按位左移運(yùn)算符使用介紹(<<)
- 一起盤點(diǎn)JavaScript中一些強(qiáng)大的運(yùn)算符
相關(guān)文章
js 獲取、清空input type="file"的值示例代碼
本篇文章主要是對(duì)js獲取、清空input type="file"的值的示例代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02js采用concat和sort將N個(gè)數(shù)組拼接起來(lái)的方法
這篇文章主要介紹了js采用concat和sort將N個(gè)數(shù)組拼接起來(lái)的方法,涉及JavaScript針對(duì)數(shù)組的合并與排序操作相關(guān)技巧,需要的朋友可以參考下2016-01-01javascript中直接引用Microsoft的COM生成Word
直接引用Microsoft的COM是可以生成Word的,下面為大家介紹下實(shí)現(xiàn)的javascript代碼2014-01-01一文帶你了解小程序中的權(quán)限設(shè)計(jì)
我們?cè)谌粘I钪袩o(wú)論是坐公交還是點(diǎn)餐,都會(huì)接觸各種各樣的小程序,下面這篇文章主要給大家介紹了關(guān)于小程序中權(quán)限設(shè)計(jì)的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09JavaScript 對(duì)引擎、運(yùn)行時(shí)、調(diào)用堆棧的概述理解
這篇文章旨在深入挖掘JavaScript,以及向大家解釋JavaScript是如何工作的。非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10你必須了解的JavaScript中的屬性描述對(duì)象詳解(上)
JavaScript提供了一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu),用來(lái)描述對(duì)象的屬性,控制它的行為,比如該屬性是否可寫、可遍歷等等。這個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu)稱為“屬性描述對(duì)象”。本文主要帶大家了解一下JavaScript中你必須了解的屬性描述對(duì)象,需要的可以參考一下2022-12-12JavaScript eval() 函數(shù)介紹及應(yīng)用示例
eval(String) 函數(shù)可計(jì)算某個(gè)字符串,并執(zhí)行其中的的 JavaScript 代碼,該方法只接受原始字符串作為參數(shù)2014-07-07js中script的上下放置區(qū)別,Dom的增刪改創(chuàng)建操作實(shí)例分析
這篇文章主要介紹了js中script的上下放置區(qū)別,Dom的增刪改創(chuàng)建操作,結(jié)合實(shí)例形式分析了JavaScript基本dom事件、script在head和body中放置的區(qū)別、以及Dom的增刪改創(chuàng)建等相關(guān)操作技巧,需要的朋友可以參考下2019-12-12