1. 程式人生 > >JavaScript中兩個感嘆號的作用

JavaScript中兩個感嘆號的作用

var o={flag:true}; 
var test=!!o.flag;//等效於var test=o.flag||false; 
alert(test); 

由於對null與undefined用!操作符時都會產生true的結果,所以用兩個感嘆號的作用就在於,如果明確設定了o中flag的值(非null/undefined/0""/等值),自然test就會取跟o.flag一樣的值;如果沒有設定,test就會預設為false,而不是null或undefined。 

在jQuery中比較經典的例子如下:

grep: function( elems, callback, inv ) { 
var ret = [], retVal; 


inv = !!inv; 

// Go through the array, only saving the items 
// that pass the validator function 
for ( var i = 0, length = elems.length; i < length; i++ ) { 
retVal = !!callback( elems[ i ], i ); 
if ( inv !== retVal ) { 
ret.push( elems[ i ] ); 



return ret; 


在使用grep函式的時候,如果給出了第三個引數且非null/undefined/0""/等值,則inv為true,否則為false。這樣做的目的就是保證inv和retVal的值都只能在true/false中取,而非其它值,為後續判斷提供便利。

相關推薦

JavaScript感嘆號作用

var o={flag:true}; var test=!!o.flag;//等效於var test=o.flag||false; alert(test); 由於對null與undefined用!操作符時都會產生true的結果,所以用兩個感嘆號的作用就在於,如果明確設定了o

JavaScript知識點總結(五)之Javascript等於號(==)和三等於號(===)的區別

一、JavaScript"=="的作用 1.當==兩邊的內容是字串時,則比較字串的內容是否相等。 2.當==兩邊的內容是數字時,則比較數字的大小是否相等。 3.當==兩邊的內容是物件或者是物件的函式屬性時,則比較記憶體地址是否相等。 二、==和===的區別   ==用於一般比較,===用於嚴格比較,

JS/JavaScript等號 == 和 三等號 === 的區別

JavaScript中兩個等號 == 和 三個等號 === 的區別 一、概念 == 和 ===  (1)  "=="叫做相等運算子,"==="叫做嚴格運算子。 (2) ==,equalit

【例項】javascript的window物件的onbeforeunload、onload、onunload的區別(在新版本的瀏覽器關閉事件可能不會觸發)

onload是在頁面載入的時候觸發,與之相反onunload是在頁面關閉(解除安裝)的時候觸發,至於onbeforeunload是指頁面將要關閉的時候觸發(一般用於彈出是否確認關閉的時候) 上程式碼 <!DOCTYPE HTML PUBLIC "-//W3C//DT

javascript操作選擇列表(有列表,如何實現在一個列表通過雙擊和多選列表內容新增到另一個列表. )

</script></head><body><table width='500' border='1' cellpadding='0' cellspacing='0'><tr><td width='45%' align="center">

JavaScript變量、作用域和內存問題(JavaScript高級程序設計第4章)

外部 對象的引用 pan object 揮手 fun 可用內存 限制 argument 一、變量 (1)ECMAScript變量肯能包含兩種不同的數據類型的值:基本類型值和引用類型值。基本類型值指的是簡單的數據段,引用類型值指那些可能由多個值構成的對象。 (2)基本數據類型

javascript計算日期(date)對象的時間差

bsp 個數字 new tar asc nbsp art span var var st1 = "2008-8-1 8:50:01"; var st2 = "2008-8-3 8:50:01"; var time1 = new Date(st1);

AndroidActivity之間簡單通信

idg tin test ide button ima 接收 9.png set 在Android中,一個界面被稱為一個activity,在兩個界面之間通信,采用的是使用一個中間傳話者(即Intent類)的模式,而不是直接通信。 下面演示如何實現兩個activity之間的通

C++:類易被忽略的默認函數

ont names namespace tor img c++編譯 style div 顯式 C++的自定義類中有六個默認的函數,即如果用戶沒有顯式定義這些函數時,C++編譯器會類中生成這些函數的默認形式。除了大家所熟知的構造函數、拷貝構造函數、賦值函數和析構函數外,C++

javascript種基本常用排序算法分析

穩定 得到 直觀 height 算法 錯誤 繼續 改進冒泡 有序 備註:內容大部分從網上復制,代碼為自己手寫。僅做知識的溫故知新,並非原創。 1.冒泡排序(Bubble Sort) (1)算法描述 冒泡排序是一種簡單的排序算法。它重復地走訪過要排序的數列,一次比較兩個

javascript計算時間差

date() body 間隔 script ges lac 可見 轉換 小寫 javascript計算兩個時間差   其實,javascript計算時間差的方式非常簡單,如果是默認的Date()類型,直接相減就是相差的毫秒數。 var d1 = new Date(‘2

網絡爬蟲--requests庫重要的對象

resp head ppa except 代碼 http http響應 sts _for 當我們使用resquests.get()時,返回的時response的對象,他包含服務器返回的所有信息,也包含請求的request的信息。 首先: response對象的屬性有以下幾個

不用比較找到數組不同的值

java 算法 /** * 找到數組中兩個不同的值 * / public static void main(String[] args) { int[] arr={2,2,1,1,3,4}; int eo = eh(arr); int o

c++類互相引用的問題

pro 如何 ++ code 泛型 cin padding 直接 fine 原文鏈接http://www.cnblogs.com/weixliu/p/3957227.html   最近在改一個C++程序的時候碰到一條警告信息,警告信息為:“

獲取數組得分高對象

就是 urn result func 條件 pri isa cti function score = [ { ‘name‘: ‘學生1‘, ‘score‘: 96 }, { ‘name‘: ‘學生2‘, ‘score‘: 95 }, { ‘name‘: ‘學生3‘, ‘s

java字符串如何比較大小

blog 順序 body ring 差值 int print compare gpo 使用 String.compareTo 方法:compareTo() 的返回值是int, 它是先比較對應字符的大小(ASCII碼順序)1、如果字符串相等返回值02、如果第一個字符和

caffelmdb的合並 [python]

base 運行 事務 ubunt env == mit utf odin 1、安裝lmdb 2、Ubuntu 系統命令:pip install lmdb 3、運行代碼:combine_lmdb.py #!/usr/bin/env python2# -*- coding:

python類列表實例如何相加或相減

array arr sharp pre sha 相減 例如 arp 相加 如下 import numpy a = [1, 2, 3, 4] b = [5, 6, 7, 8] a_array = numpy.array(a) b_array = numpy.ar

求樹節點的最低公共祖先節點(go)

該題目有以下幾種情況可以考慮 1. 樹是二叉搜尋樹,二叉搜尋樹的特點是根節點值大於所有左子樹節點值,小於所有右子樹節點值,則最低公共祖先即該節點值大於給定兩個節點中的一個值,小於另外一個節點的值,go程式碼實現如下 type TreeNode struct { Val int Lef

oracle sql 遊標的簡單用法(tip:sql單引號表示一個單引號)

--遊標遍歷某個欄位 (打印出來) declare            res_sql varchar2(2000); cursor cur is            select f_