JS练习题

1.注意:只要+【加号】两边没有字符串,我们就按正常的数字相加就OK了

1 <body>
2     <script type="text/javascript">
3         var str = false +1;
4         document.write(str);
5     </script>
6 </body>
View Code

上面这道题实际上带有隐世类型转换,false转换为0,然后和1相加,所以结果为1;

2.注意:运算符之间的优先级

1 <body>
2     <script type="text/javascript">
3         var demo = false ==1;
4         document.write(demo);
5     </script>
6 </body>
View Code

上面这道题显然==判断是否相等的优先级要高于=赋值运算符,所以先看false是否等于1【false转换成数字为0,显然不等于1,返回false】,然后将比较的结果赋值给变量demo,所以demo的值为false;

3.注意:只有一种情况我们在不定义变量的情况下,使用变量是不报错的,就是使用typeof(a)这种情况,而且返回值为字符串类型的undefined;

注意:虽然null是一个原始类型,但是当null交给typeof的时候,typeof总是认为null是给Object占位使用的,所以我们使用typeof(null)的时候,返回值是Object;

注意:true转换为数字是1,false转换成数字是0,那么-true【负true就是-1】,一般情况下前面加+号或者-号的都是将其转换为数字【隐式转换】,所以+undefined是想将undefined转换为数字【Number】,当然undefined是转换不成Number数字的,所以返回值是NaN【not a number】,而-1+NaN=NaN,NaN+""【空串】得到的结果就是"NaN"的字符串!所以如下代码:

1 <body>
2     <script type="text/javascript">
3         if(typeof(a)&&-true + (+undefined) +""){
4             document.write("基礎扎實");
5         }
6     </script>
7 </body>
View Code

所以if条件中的语句就成了"undefined"字符串 和 “NaN”字符串做与操作,由于是两个字符串做与操作,所以if条件得到的返回值是true,那么就可以执行if语句体,从而可以输出:基础扎实!

1 <body>
2     <script type="text/javascript">
3         if(11 + "11"*2 == 33){
4             document.write('基础扎实');
5         }
6     </script>
7 </body>
View Code

注意:凡是用到*【乘号】的,我们一般都是将*【乘号】两边的东西转换为数字,所以这里的字符串"11"会被隐式转换为数字11,然后乘以2,得到22,然后和前面的11相加,得到33再和33比较是否相等,显然是相等的,所以会执行if语句内部的输出,最终会输出:基础扎实!

隐式转换:除了+号之外的运算符,如-,*,/,%,等运算符两边的东西都是要先隐式转换为数字,然后再进行计算的!如下所示:

"11"-"2":实际上是将字符串11和字符串2转换为数字11和数字2,然后再进行相减!

4.注意:""【空串】和"   "【空格字符串不是一回事】,空串转换为布尔值是false,而空格字符串转换为布尔值

 是true;所以!""是true,而 !"  "是false,而 !!""则是false,!!"  "则是true,所以如下代码:

1 <body>
2     <script type="text/javascript">
3         !!" " + !!"" - !!false || document.write('你觉得能打印,你就是猪');
4     </script>
5 </body>
View Code

||前面的是:true + false -false其实就是转换为数字再计算,得到1,||【或】好前面是1,相当于true,所以就不会执行||【或】后面的代码,所以不会输出后面的内容!

5.CSS的属性值有几个?分别是啥?代表啥含义:

  ①.inline【行内元素】

  ②.inline-block【行内块元素】

  ③.block【块元素】

  ④.none【样式消失,且不占用空间】

============================================新知识点=========================================

  6.立即执行函数:

1 <body>
2     <script type="text/javascript">
3         var sum = (function abc(a,b,c){
4             var d = a+b+c;
5             return d;
6         }(1,2,3));
7         console.log(sum)
8     </script>
9 </body>
View Code

注意:立即执行函数有两种形式如下所示:

1 <body>
2     <script type="text/javascript">
3         //立即执行函数
4         (function abc(){}()); //第一种形式,W3C建议使用这一种
5         (function abc(){})();//第二种形式
6     </script>
7 </body>
View Code

 注意:以下使用方法是错误的,

1 <body>
2     <script type="text/javascript">
3         //立即执行函数
4         function test(){
5             var abc = 123;
6             console.log(abc);
7         }();
8     </script>
9 </body>
View Code

在控制台上会报一个语法错误!这里需要注意:只有表达式才能执行;所以正确写法如下:

 1 <body>
 2     <script type="text/javascript">
 3         //立即执行函数
 4         function test(){
 5             var abc = 123;
 6             console.log(abc);
 7         }
 8         test();
 9     </script>
10 </body>
View Code

注意:test(); 是表达式,就像123;是表达式123+345;也是表达式!

当然我可以在刚才函数声明后面加一个立即执行的符号(),然后在前面加上 + 、-、!【非】

1 <body>
2     <script type="text/javascript">
3         //立即执行函数
4         + function test(){
5             var abc = 123;
6             console.log(abc);
7         }();
8     </script>
9 </body>
View Code

也可以让函数立即执行,而且执行之后会立即将函数名释放掉,也就是函数名就找不到了,我们可以在控制台上再次输入函数名,结果就会报错!

7.在js中一个变量如果不声明直接使用会报错,但是如果一个对象的属性不存在,我们访问它,则不会报错,而是会输出undefined!

原文地址:https://www.cnblogs.com/python-machine/p/8082922.html