5
5
6
6
我们在[ 上一篇文章] ( http://www.cnblogs.com/smyhvae/p/8303507.html ) 里讲到了JS中** 变量** 的概念,本篇文章讲一下** 运算符** 和表达式。
7
7
8
-
9
8
## 前言
10
9
11
10
比如说` + ` 、` * ` 、` / ` 、` ( ` 都是** 运算符** ,而` (3+5)/2 ` 则是** 表达式** 。
34
33
35
34
![ ] ( http://img.smyhvae.com/20180117_1651.png )
36
35
37
-
38
36
** 求余的举例** :
39
37
40
38
假设用户输入345,怎么分别得到3、4、5这三个数呢?
75
73
76
74
原式 = 1 + 6 % 4 / 3 = 1 + 2 / 3 = 1.66666666666666
77
75
78
-
79
76
### 算数运算符的注意事项
80
77
81
78
(1)当对非Number类型的值进行运算(包括` + ` 、` - ` 、` * ` 、` / ` )时,会将这些值转换为Number然后在运算。(注:` Number + 字符串 ` 、` 字符串 + 字符串 ` 是特例,稍后再讲)
112
109
113
110
我们可以利用这一特点,为一个值` -0 ` 、` *1 ` 、` /1 ` 来将其转换为Number。原理和Number()函数一样,使用起来更加简单。
114
111
115
-
116
-
117
112
### 乘方
118
113
119
114
如果想计算 ` a 的 b 次方 ` ,可以使用如下函数:
@@ -212,30 +207,134 @@ sqrt即“square 开方”。比如:
212
207
213
208
原理同上。
214
209
215
- ## 布尔值、关系运算符、逻辑运算符
210
+ ### 代码举例
211
+
212
+ ``` javascript
213
+ var n1= 10 ;
214
+ var n2= 20 ;
215
+
216
+ var n = n1++ ; // n1 = 11 n1++ = 10
217
+
218
+ console .log (' n=' + n); // 10
219
+ console .log (' n1=' + n1); // 11
220
+
221
+ n = ++ n1 // n1 = 12 ++n1 =12
222
+ console .log (' n=' + n); // 12
223
+ console .log (' n1=' + n1); // 12
224
+
225
+ n = n2-- ;// n2=19 n2--=20
226
+ console .log (' n=' + n); // 20
227
+ console .log (' n2=' + n2); // 19
228
+
229
+ n = -- n2; // n2=18 --n2 = 18
230
+ console .log (' n=' + n); // 18
231
+ console .log (' n2=' + n2); // 18
232
+
233
+ ```
234
+
235
+ ## 逻辑运算符
216
236
217
- ### 布尔值
237
+ 逻辑运算符有三个:
218
238
219
- 我们在上一篇文章中学习到的变量类型中包括:数值型、字符串型。今天再来学习一个类型: ** 布尔类型 ** 。
239
+ - && 与(且):两个都为真,结果才为真
220
240
221
- 布尔类型的值,就两个:true、false。
241
+ - || 或:只要有一个是真,结果就是真
222
242
223
- 布尔值直接使用就可以了,千万不要加上引号 。
243
+ - ! 非:对一个布尔值进行取反 。
224
244
225
- 代码:
245
+ ** 连比的写法:**
246
+
247
+ 来看看逻辑运算符连比的写法。
248
+
249
+ 举例1:
250
+
251
+ ```
252
+ console.log(3 < 2 && 2 < 4);
253
+ ```
254
+
255
+ 输出结果为false。
256
+
257
+ 举例2:(判断一个人的年龄是否在18~ 60岁之间)
226
258
227
259
``` javascript
228
- var a = true ;
229
- console . log ( typeof a );
260
+ var a = prompt ( " 请输入您的年龄 " ) ;
261
+ alert (a >= 18 && a <= 65 );
230
262
```
231
263
232
- 控制台输出结果:
264
+ ### 注意事项
265
+
266
+ (1)能参与逻辑运算的,都是布尔值。
233
267
268
+ (2)JS中的` && ` 属于** 短路** 的与,如果第一个值为false,则不会看第二个值。举例:
269
+
270
+ ``` javascript
271
+ // 第一个值为true,会检查第二个值
272
+ true && alert (" 看我出不出来!!" ); // 可以弹出 alert 框
273
+
274
+ // 第一个值为false,不会检查第二个值
275
+ false && alert (" 看我出不出来!!" ); // 不会弹出 alert 框
234
276
```
235
- boolean
277
+
278
+ (3)JS中的` || ` 属于** 短路** 的或,如果第一个值为true,则不会看第二个值。举例:
279
+
280
+ (4)如果对** 非布尔值** 进行逻辑运算,则会** 先将其转换为布尔值** ,然后再操作。举例:
281
+
282
+ ``` javascript
283
+ var a = 10 ;
284
+ a = ! a;
285
+
286
+ console .log (a); // false
287
+ console .log (typeof a); // boolean
288
+ ```
289
+
290
+ 上面的例子,我们可以看到,对非布尔值进行` ! ` 操作之后,返回结果为布尔值。
291
+
292
+ ### 非布尔值的与或运算【重要】
293
+
294
+ > 之所以重要,是因为在实际开发中,我们经常用这种代码做容错处理。
295
+
296
+ 非布尔值进行** 与或运算** 时,会先将其转换为布尔值,然后再运算,但返回结果是** 原值** 。比如说:
297
+
298
+ ``` javascript
299
+ var result = 1 && 2 ; // 运算过程:true && true;
300
+ console .log (' result:' + result); // 打印结果:2
236
301
```
237
302
238
- ### 关系运算符
303
+ 上方代码可以看到,虽然运算过程为布尔值的运算,但返回结果是原值。
304
+
305
+ 那么,返回结果是哪个原值呢?我们来看一下。
306
+
307
+ ** 与运算** 的返回结果:(以两个非布尔值的运算为例)
308
+
309
+ - 如果第一个值为true,则必然返回第二个值
310
+
311
+ - 如果第一个值为false,则直接返回第一个值
312
+
313
+ ** 或运算** 的返回结果:(以两个非布尔值的运算为例)
314
+
315
+ - 如果第一个值为true,则直接返回第一个值
316
+
317
+ - 如果第一个值为false,则返回第二个值
318
+
319
+ ## 赋值运算符
320
+
321
+ 可以将符号右侧的值赋值给符号左侧的变量。
322
+
323
+ 举例:
324
+
325
+ - ` += ` 。a += 5 等价于 a = a + 5
326
+
327
+ - ` -= ` 。a -= 5 等价于 a = a - 5
328
+
329
+ - ` *= ` 。a * = 5 等价于 a = a * 5
330
+
331
+ - ` /= ` 。a /= 5 等价于 a = a / 5
332
+
333
+ - ` %= ` 。a %= 5 等价于 a = a % 5
334
+
335
+ ## 关系运算符
336
+
337
+ 通过关系运算符可以比较两个值之间的大小关系,如果关系成立它会返回true,如果关系不成立则返回false。
239
338
240
339
关系运算符有很多种,比如:
241
340
@@ -252,7 +351,19 @@ sqrt即“square 开方”。比如:
252
351
253
352
关系运算符,得到的结果都是布尔值:要么是true,要么是false。
254
353
255
- ** ` == ` 符号的强调** :
354
+ ### 非数值的比较
355
+
356
+ (1)对于非数值进行比较时,会将其转换为数字然后再比较。
357
+
358
+ (2)特殊情况:如果符号两侧的值都是字符串时,** 不会** 将其转换为数字进行比较。比较两个字符串时,比较的是字符串的** Unicode编码** 。
359
+
360
+ 比较字符编码时,是一位一位进行比较。如果两位一样,则比较下一位,所以借用它可以来对英文进行排序。
361
+
362
+ ** 注意** :在比较两个字符串型的数字时,一定要先转型。
363
+
364
+ (3)任何值和NaN做任何比较都是false。
365
+
366
+ ### ` == ` 符号的强调
256
367
257
368
注意` == ` 这个符号,它是** 判断是否等于** ,而不是赋值。
258
369
@@ -262,17 +373,32 @@ sqrt即“square 开方”。比如:
262
373
console.log("我爱你中国" == "我爱你中国"); //输出结果为true
263
374
```
264
375
265
- (3 )` == ` 这个符号并不严谨,会将不同类型的东西,转为相同类型进行比较。例如:
376
+ (2 )` == ` 这个符号并不严谨,会将不同类型的东西,转为相同类型进行比较。例如:
266
377
267
378
```
268
379
console.log("6" == 6); //true
269
380
console.log(0 == -0); //true
270
381
```
271
382
272
- 如果要保证 ** 完全等于 ** ,我们就要用三个等号 ` === ` 。例如:
383
+ (3)undefined 衍生自 null,所以这两个值做相等判断时,会返回true。
273
384
385
+ ``` javascript
386
+ console .log (undefined == null ); // 打印结果:true。
387
+ ```
388
+
389
+ (4)NaN不和任何值相等,包括他本身。
274
390
391
+ ``` javascript
392
+ console .log (NaN == NaN ); // false
275
393
```
394
+
395
+ 问题:那如果我想判断 b的值是否为NaN,该怎么办呢?
396
+
397
+ 答案:可以通过isNaN()函数来判断一个值是否是NaN。如果 b 为 NaN,则返回true;否则返回false。
398
+
399
+ (5)如果要保证** 完全等于** ,我们就要用三个等号` === ` 。全等不会做类型转换。例如:
400
+
401
+ ``` javascript
276
402
console .log (" 6" === 6 ); // false
277
403
console .log (6 === 6 ); // true
278
404
```
@@ -285,43 +411,32 @@ sqrt即“square 开方”。比如:
285
411
286
412
另外还有:** ` == ` 的反面是` != ` ,` === ` 的反面是` !== ` 。** 。例如:
287
413
288
- ```
414
+ ``` javascript
289
415
console .log (3 != 8 ); // true
290
416
console .log (3 != " 3" ); // false,因为3=="3"是true,所以反过来就是false。
291
417
console .log (3 !== " 3" ); // true,应为3==="3"是false,所以反过来是true。
292
418
```
293
419
294
- ### 逻辑运算符
295
420
296
- 逻辑运算符有三个:
421
+ ## 三元运算符
297
422
298
- - && 与(且):两个都为真,结果才为真
423
+ 三元运算符也叫条件运算符。
299
424
300
- - || 或
301
-
302
- - ! 非:只要有一个是真,结果就是真
303
-
304
- 能参与逻辑运算的,都是布尔值,得到的答案仍然是布尔值。
305
-
306
- ** 连比的写法:**
307
-
308
- 来看看逻辑运算符连比的写法。
309
-
310
- 举例1:
425
+ 语法:
311
426
312
427
```
313
- console.log(3 < 2 && 2 < 4) ;
428
+ 条件表达式?语句1:语句2 ;
314
429
```
315
430
316
- 输出结果为false。
431
+ ** 执行的流程 ** :
317
432
318
- 举例2:(判断一个人的年龄是否在18 ~ 60岁之间)
433
+ 条件运算符在执行时,首先对条件表达式进行求值:
319
434
320
- ```
321
- var a = prompt("请输入您的年龄");
322
- alert(a>=18 && a<= 65);
323
- ```
435
+ - 如果该值为true,则执行语句1,并返回执行结果
324
436
437
+ - 如果该值为false,则执行语句2,并返回执行结果
438
+
439
+ 如果条件的表达式的求值结果是一个非布尔值,会将其转换为布尔值然后在运算。
325
440
326
441
327
442
## 我的公众号
@@ -332,5 +447,3 @@ sqrt即“square 开方”。比如:
332
447
333
448
![ ] ( http://img.smyhvae.com/2016040102.jpg )
334
449
335
-
336
-
0 commit comments