1. 程式人生 > >js 當變數值為0,判斷是否為空時(0=="")返回ture的問題

js 當變數值為0,判斷是否為空時(0=="")返回ture的問題

var aa = 0;
if(aa=="")alert("111");

或者

var aa = 00;
aa==""

都是返回true。

這是因為0與 ’ ’ 轉換成布林型都是false的。

var aa = 0;
if(aa.toString()=="")   //false
   alert("111");

如果不顯示將比較的兩個表示式轉換成型別相同時,那麼:
相同的字串、數值上相等的數字、相同的物件、相同的 Boolean 值或者(當型別不同時)能被強制轉化為上述情況之一,均被認為是相等的。

此處,將aa和 ’ ’ 均轉換成Boolean型別,所以相等。

或者使用===號來比較

var aa = 0;
if(aa==="")   //false
   alert("111");

附:==和===號的區別
簡單來說就是使用“==”時,如果兩邊型別不同,js引擎會把它們轉換成相同型別然後在進行比較,而“===”則不會進行型別轉換,因此當兩邊不是屬於同一個型別,肯定不相等。例如:

var a = 0, b = '0';

alert((a == b) + '--' + (a === b))

此時看到的結果為“true–false”。

=== 判斷規則

1.如果型別不同,就[不相等]
2.如果兩個都是數值,並且是同一個值,那麼[相等];(!例外)的是,如果其中至少一個是 NaN,那麼[不相等]。(判斷一個值是否是NaN,只能用isNaN()來判斷)
3.如果兩個都是字串,每個位置的字元都一樣,那麼[相等];否則[不相等]。
4.如果兩個值都是true,或者都是false,那麼[相等]。
5.如果兩個值都引用同一個物件或函式,那麼[相等];否則[不相等]。
6.如果兩個值都是null,或者都是undefined,那麼[相等]。

== 判斷規則:
1.如果兩個值型別相同,進行 === 比較。
2.如果兩個值型別不同,他們可能相等。根據下面規則進行型別轉換再比較:
3.如果一個是null、一個是undefined,那麼[相等]。
4.如果一個是字串,一個是數值,把字串轉換成數值再進行比較。
5.如果任一值是 true,把它轉換成 1 再比較;如果任一值是 false,把它轉換成 0 再比較。
6.如果一個是物件,另一個是數值或字串,把物件轉換成基礎型別的值再比較。物件轉換成基礎型別,利用它的toString或者valueOf方法。js核心內建類,會嘗試valueOf先於toString;例外的是Date,Date利用的是toString轉換。非js核心的物件,令說(比較麻煩,我也不大懂)
7.任何其他組合,都[不相等]。

特別需要注意的是true、false的轉換,例如:

alert(true == 1);  //ture
alert(true == 2); //false, true會轉換成number,也就是1,當然 1 不等於 2
//可以使用 !! 來把一個數據型別轉換為boolean型
alert(true == !!2) //true,!2 === false !(!=2) = !false = true

另外在js中,如果把一個變數用在邏輯運算中,那麼變數在無初始值或者其值為 0、-0、null、”、false、undefined 或者 NaN時,它的值為 false,這意味test==false,當test為undefined的時候是true的,這正是!==和===的 有用地方。

這兩個操作符將檢查變數的精確值(比如null) 而不是單純的計算值(false)。

相關推薦

js 數值0判斷是否0==''返回ture的問題

var aa = 0; if(aa==""){ alert("111"); } ------------------------------ var aa = 00; alert(aa==""); 都是返回true。 這是因為0與 ’ ’ 轉換成布林型都是false的。

js 數值0判斷是否0==''返回ture的問題

var aa = 0; if(aa==""){ alert("111"); } ------------------------------ var aa = 00; alert(aa==""); 都是返回true。 這是因為0與 ’ ’ 轉換成布林型都是fa

js 數值0判斷是否0==""返回ture的問題

var aa = 0; if(aa=="")alert("111"); 或者 var aa = 00; aa=="" 都是返回true。 這是因為0與 ’ ’ 轉換成布林型都是false的。 var aa = 0; if(aa.toStri

關於JS量提升的規則和原理的一點理解

cnblogs 打印 blog javascrip 誤區 down mark fun ont 上篇文章中講到變量提升和函數提升的先後順序時蒙了,後來去查了一下資料,特別整理一下。 在《你不知道的JavaScript(上卷)》一書的第40頁中寫到:函數會首先被提升,然後才是變

Zabbix 4.0添加Linux監控主機2

include onf blog 地址 x86_64 ges 監控模板 根據 logfile 一、安裝Zabbix-agent 以下操作在所需加入監控的Linux主機上進行:實驗為,192.168.100.51 # rpm -ivh http://repo.zabbix.c

js中添加監聽判斷是什麽事件

什麽 contain 添加 current src ner type $apply test window.addEventListener(‘message‘, function (event) { if (event.data.type === "

判斷一個可滾動元素是否滾動到了底部將源對象合並到目標對象中去判斷是否字符串

docs == ret 字符 xtend body for 目標 tom function isScrollToBottom(e, fn) { // e.srcElement存在兼容性問題,並非標準特性 // https://developer.mozil

根據經緯度求方位角以北0順時針正方向

1.傳入兩個經緯度座標,計算出兩個座標之間的角度,範圍是0-360。 // 計算方位角,正北向為0度,以順時針方向遞增 private double computeAzimuth(LatLng la1, LatLng la2) {     double lat1 = la1.latitud

0到1學習Vue.js包含例子及實戰專案

前端三巨頭:React、Angular、Vue。沒錯,什麼jQuery,seaJs,gulp等都逐漸脫離了熱點。面試的時候不吹上一點新技術,好像自己就不是搞前端的似的。當然,希望大家都是抱著好學的心來開始一門學藝的,不管怎樣,請接著看下去吧。 本系列文將會通過很

0到1學習Vue.js包含例子及實戰專案

上一篇文章中,我們初步瞭解單頁面元件這個概念,現在通過一個專案,來進一步解析元件的應用。 需求背景 元件庫是做UI和前端日常需求中經常用到的,把一個按鈕,導航,列表之類的元素封裝起來,方便日常使用,呼叫方法只需直接寫上<qui-button><

js判斷是否安裝某個appandroid沒有則下載

現在經常有寫場景需要提示使用者下載app, 但是如果使用者已經安裝,我們希望是直接開啟app。 實際上,js是沒有判斷app是否已經安裝的方法的,我們只能曲線救國。 首先,我們需要有call起app的schema, 已經下載地址,比如: var schema = 'myApp://main';

定義一個日期類對日期進行設定判斷是否閏年

include using namespace std; class Date { public: void Set(int y,int m,int d); bool IsLeapYear();

Spring Boot 2.0版本 Jackson全域性轉化long型別String解決jackson序列化long型別缺失精度問題

說明 在傳遞long型別到前臺時,如果long型別的數值比較長,會出現精度丟失的問題。以下是解決辦法。 前提 版本:Spring Boot 2.0及以上 序列化工具Jackson 解決辦法 import org.springframework.boot.aut

Windows socket通訊出現接收資料出現recv返回大於0但緩衝區大小0的問題

服務端在ubuntu伺服器下,客戶端在windows下,採用socket進行通訊,在客戶端接收資料時,出現了詭異的情況,recv返回值大於0,但緩衝區大小為0,程式碼如下: char buff[10]; int res=recv(ClientSocket, b

JS中鮮為人知的問題: [] == ![]結果true而 {} == !{}卻false

console.log( [] == ![] ) // true console.log( {} == !{} ) // false 在比較字串、數值和布林值的相等性時,問題還比較簡單。但在涉及到物件的比較時,問題就變得複雜了。最早的ECMAScript中的相等和不相等操作符會在執行比較之前,先將物件

獲取已安裝應用資訊判斷是否系統應用

/** * 獲取已安裝應用資訊 * @param includeSystemApps true:包含系統應用 false:不包含系統應用 */ @SuppressWarnings("static-access") p

如何在jsp頁面中獲取js數值

直接傳值啊, <script>      var   a= "123 ";      document.all( "text1 ").value=a; </script> <tr> <td> <input   type=

實現從後臺傳到前臺的list判斷是否判斷list中的值是否

//從後臺傳到前臺的是 pageInfo 封裝的分頁,裡面有 list 、 需要分頁的相關引數。ModelAndView mv = new ModelAndView("/base/attach"); mv.addObject("pageInfo", iAttachServic

C語言入門:輸入任意一個正數奇數判斷是否質數

C語言永遠不會過時 其實學程式設計關鍵是學習其思想,如果你精通了一門,再去學其他的時候也很容易上手。C不會過時的,尤其是在unix、linux操作平臺上,學好C是必須的。 C跟C++在很多方面也是相容的,c是c++的基礎。 再者c能從很大的程度上幫你瞭解計算機的發展史,

要求迴圈輸入一個數判斷是否迴文數

import java.util.Scanner; public class HuiWenShu { public static void main(String[] args) { Scanner input = new Scanner(System.in);