JS 2018.09.13训练题笔记

1、JavaScript程序中,alert(undefined == null)的输出结果是     ture;

    解析:undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true。 

              ==仅判断值是否相同,undefined和null是相同的,故true

             ===在判断值是否相同的同时还判断类型是否相同,undefined类型为undefined,null类型为object,因此为false

2、javascript常见事件的触发情况

  • onBlur:当失去输入焦点后产生该事件
  • onFocus:输入获得焦点后,产生该文件
  • onchange:当文字值改变时,产生该事件
  • onselect:当文字加亮后,产生该事件
  • onClick:当组件被点击时产生的事件

3,、下面这段javascript代码, 

var msg='hello'; 

for (var i=0; i<10; i++)

 { 

   var msg='hello'+i*2+i; 

 }

 alert(msg); 

最后一句alert的输出结果是   hello189

 解析:易错答案(hello)javascript只有函数域,没有块作用域的概念,所以在同一个作用域中同一个变量声明多次还是第一次声明那个!

4、有如下代码:

var name="World!";

(function(){

var name;    

if(typeof name=== 'undefined'){

name='Jack';

console.log('Goodbye'+name);

}

else

{

console.log('hello'+name);

}

}

)();

请问执行后弹出的值是:Goodbye Jack

解析:当函数内部变量与全局变量同名是,全局变量会被覆盖,因为JS是单线程执行var  name 当前没有复制,所以类型为undefined;

变量声明提升

JS码分为解析阶段执行阶段
在解析阶段会找到所有声明,并会与各自执行环境关联。只有声明操作会被提升,赋值和逻辑操作会被留在原地等待代码执行。
如对于 var a=2;  解析器会把它当成声明操作(var a)和赋值操作(a=2)两部分。声明操作会被提升到它所在执行环境的顶部,并赋值 undefined赋值操作则会原地待命。 原代码相当于:
var name="world";
(function(){
var name;         //JS无块级作用域,所以变量声明提升到此处
if(typeof name==="undefined"){                                     //进入if控制语句
name="Jack";
console.log("Goodbye"+name);                                     //执行该语句
}else{
console.log("Hello"+name);
}
})();
//所以答案为 Goodbye Jack

5、如下代码输出的结果是什么:

1

2

3

4

console.log(1"2"+"2");

console.log(1+ +"2"+"2");

console.log("A""B"+"2");

console.log("A""B"+2);

1

console.log(1"2"+"2");

做加法时要注意双引号,当使用双引号时,JavaScript认为是字符串,字符串相加等于字符串合并。
因此,这里相当于字符串的合并,即为122.
 

1

console.log(1+ +"2"+"2");

第一个+"2"中的加号是一元加操作符,+"2"会变成数值2,因此1+ +"2"相当于1+2=3.
然后和后面的字符串“2”相合并,变成了字符串"32".
 

1

console.log("A""B"+"2");

"A"-"B"的运算中,需要先把"A"和"B"用Number函数转换为数值,其结果为NaN,在减法操作中,如果有一个是NaN,则结果是NaN,因此"A"-"B"结果为NaN。
然后和"2"进行字符串合并,变成了NaN2.
 

1

console.log("A""B"+2);

根据上题所述,"A"-"B"结果为NaN,然后和数值2进行加法操作,在加法操作中,如果有一个操作数是NaN,则结果为NaN。

6、filter的两种使用方法

  • 在模板中使用filter

       我们可以直接在{{}}中使用filter,跟在表达式后面用 | 分割,语法如下:
            {{ expression | filter }}
      也可以多个filter连用,上一个filter的输出将作为下一个filter的输入
           {{ expression | filter1 | filter2 | ... }}
      filter可以接收参数,参数用 : 进行分割,如下:           

           {{ expression | filter:argument1:argument2:... }}

   除了对{{}}中的数据进行格式化,我们还可以在指令中使用filter,例如先对数组array进行过滤处理,然后再循环输出:
         <span ng-repeat="a in array | filter ">

  •  在controller和service中使用filter

               我们的js代码中也可以使用过滤器,方式就是我们熟悉的依赖注入,例如我要在controller中使用currency过滤器,只需         将它注入到该controller中即可,代码如下:
                app.controller('testC',function($scope,currencyFilter){
                    $scope.num = currencyFilter(123534);  
               }

      在模板中使用{{num}}就可以直接输出 $123,534.00了!在服务中使用filter也是同样的道理。

     ng提供了一个$filter服务可以来调用所需的filter,你只需注入一个$filter就够了,使用方法如下:
          app.controller('testC',function($scope,$filter){
              $scope.num = $filter('currency')(123534);
              $scope.date = $filter('date')(new Date());  
         }

可以达到同样的效果。好处是你可以方便使用不同的filter了。

7、假设有如下代码,那么a(10)的返回结果是     (5)

function a(a)

{

  a^=(1<<4)-1;

   return a;

}

解析:

1<<4   左移相当于1*2^4=16

a^=16-1=15

a=a^15=10^15

^ 异或运算:

10的二进制00001010

15的二进制00001111

========>00000101  转成十进制:5

按位异或运算,同为1或同为0取0,不同取1

8、JS中,可以将对象分为“内部对象”、“宿主对象”和“自定义对象”三种。

  • 内部对象

js中的内部对象包括Array、Boolean、Date、Function、Global、Math、Number、Object、RegExp、String以及各种错误类对象,包括Error、EvalError、RangeError、ReferenceError、SyntaxError和TypeError。

其中Global和Math这两个对象又被称为“内置对象”,这两个对象在脚本程序初始化时被创建,不必实例化这两个对象。

  • 宿主对象

宿主对象就是执行JS脚本的环境提供的对象。对于嵌入到网页中的JS来说,其宿主对象就是浏览器提供的对象,所以又称为浏览器对象,如IE、Firefox等浏览器提供的对象。不同的浏览器提供的宿主对象可能不同,即使提供的对象相同,其实现方式也大相径庭!这会带来浏览器兼容问题,增加开发难度。

浏览器对象有很多,如Window和Documen,Element,form,image,等等。

  • 自定义对象

顾名思义,就是开发人员自己定义的对象。JS允许使用自定义对象,使JS应用及功能得到扩充

9、match是支持正则表达式的String对象的方法

今天在牛客网上刷题时做的笔记,方便自己复习。

猜你喜欢

转载自blog.csdn.net/qq_41261490/article/details/82685159
今日推荐