運算符
+ - / % **
- 在加號 任意一側 出現了字符串的時候 是字符串拼接
- % 是取餘數
var a =7;a =a%2 console.log(a);
結果是1,即7除2的餘數 - ** 平方
賦值運算
= += -= *= /= %= **=
var a = 7;a+=7
代表意思是 a=a+7 算數運算不存在分數
<body>
<div id="box">
<p class="on"></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
</div>
</body>
<script>
var op = document.getElementsByTagName("p");
var index = 0;
document.onclick = function () {
op[index].className = "";
index++;
<!--if(index>op.length-1){-->
<!-- index = 0;-->
<!--}-->
index = index%op.length;//取餘數 代替了if判斷
op[index].className = "on";
}
</script>
1%5 = 1 ; 上面代碼爲了實現點擊後,p的背景顏色發生改變,用了判斷
比較運算
> < == != >= <= === !==
var a =10; b="6"; console.log(a>b);
結果是true,
< == 數值和“數字”做比較 有一個類型轉換
var a ="10"; b="6"; console.log(a>b);
結果是false;如果說 字符串做比較 按照ASCII碼錶順序挨個作對比
邏輯運算符
&& 且 || 或 ! 非
兩側都是布爾值的情況
- && 兩側都是true 返回true
- // 兩邊都是假 返回假 其他情況返回真
var a =1>2||3>2&&2>1;
console.log(a);//結果是true
- && 運算順序優先級高於||
兩側不是布爾值
- && 遇到假就停止 並返回當前值 到頭之後返回最後一個值
- || 遇到真就停止並返回當前值 到頭之後返回最後一個值
- ! 取到的是布爾值
- 我們在控制流程的時候 通常會用到 邏輯運算的短路特性
var a = 5&&0&&6;
console.log(a);
結果是0,因爲0是假
var a=5&&document.getelementsbytagname("p")&&6;
console.log(a);
結果是6,document.getelementsbytagname("p")雖然沒找到 但是返回值是一個空的類數組 是真的
var a=5&&document.getelementbyid("box")&&6;
console.log(a);
結果是是null document.getelementbyid("box")返回值是null
var b=0||4||5;
console.log(b);
結果是0
var b=1||2&&5;
console.log(b);
結果是1,先運算 && 結果是5,再||結果是1
var b=""||2&&0;
console.log(b);
結果是0,先&& 結果是0,再||,都是假 爲0
var c="hahah";
c!=c
console.log(c);
結果是false
var n=6;
3>n&&fn();
function fn(){
console.log(123);
}
函數不會執行,
顯示類型轉換 平時只做字符串---數值轉換
- number(); 不會改變原有數據類型 而是把轉換之後的結果 返回出來
<script>
var a ="123";
var b = number(a);
console.log(a);
console.lod(b);
</script>
第一個結果是“123” 第二個是123
var a="123b";
var b=number(a);
console.log(b);
console.log(typeof b);
第一個結果是NaN,另一個是number
- 數值 並不是所有類型的數據就是數 還有一個不是數 是NaN
console.log(NaN===NaN);
結果是false
var a =NaN;
console.log(a===a);
結果是false,即便是它自己也不等於自己
var a=true;
var b=number(a);
console.log(b);
結果是1 通電斷電 1 0 高級語言:機器不能直接看懂 false會變成0
var a=[];
var b=number(a);
console.log(b);
結果是0 空數組被解釋爲0 如果按照數學邏輯是正確的數 那麼會轉換成數 數組中有多個值 被解釋爲nan
var a=["123"];
var b=Number(a);
console.log(b);
結果是123
var a=["123" ,"1345"];
var b=Number(a);
console.log(b);
結果是NaN
var a=null;
var b=Number(a);
console.log(b);
結果是0
其他顯示類型轉換
- String();和alert()表現一致 所有數據類型都能轉變成字符串
- Boolean();
var a="";
var b=!!a;//var b =boolean(a);效果一樣
console.log(b);
結果是false 如何判斷數據類型爲NaN
var a =123;
console.log(isNaN(a));
- isNaN 返回布爾值, true 就是NaN
parseInt parseFloat 用於把寬高帶px解釋爲數字 toFixed(2) 保留幾位小數 會四捨五入
parseInt 分析 整數 ;parseFloat小數數
強制類型轉換 會從空格之後開始 左往右進行解釋 直到遇到不符合數學邏輯的字符爲止 解釋爲字符串,如果空格在中間會被認爲是字符串
var a ="00100";
console.log(parseInt(a));
結果是100
var a ="00.100";
console.log(parseInt(a));
結果是0
var a ="100px";
console.log(parseInt(a));
結果是100
var a ="100px";
console.log(number(a));
console.log(parseInt(a));
第一個結果是NaN,第二個結果是100
var a ="4/8";
console.log(parseInt(a));
結果是4 遇到/會停止
var a ="- 4/8";
console.log(parseInt(a));
結果是NaN -是啥?不是數
var a =2.2222221355666;
console.log(a);
結果不會全部打印出來,小數被轉換成二進制之後 可能無限循環 損失精度 不要用小數做判斷
var a ="[]";
console.log(parseInt(a));
結果是nan parseInt會把空數組解釋爲NaN
var a ="["123"]";
console.log(parseInt(a));
結果是123
var a ="["123","12355"]";
console.log(parseInt(a));
結果是123 數組中有多個值 只解釋第一個值
var a =2.2222221355666;
console.log(a.tofixed(2);代表取小數點後兩位 **數值類型變爲字符串,會四捨五入**
隱式類型轉換
- 其他類型轉字符串 +”“
var a =null;
a = a+"";
console.log(a);
結果是null
- 其他類型轉數值 用*1 /1 null是0 undefined是nan
var a ="123";
a = a*1;
console.log(a);
var a =undefined;
a = a/1;
console.log(a);
結果是NaN
- 其他類型轉布爾 !!
var a="";
var b=!!a;//var b =boolean(a);效果一樣
console.log(b);
var a =undefined;
a = a++;//a=a+1;
console.log(a);
結果是NaN
- a++ 和 a=a+1不一樣 a++會有類型轉化
var a ="123";
a = a++;//a=a+1;
console.log(a);
第一種情況是124 第二種是1231