• 一些javascript题目


    群里讨论过的题目,分享一下。

    function test(){
        var m=n=1;
        alert(m);
    }
    alert(n);
    
    //因为test函数没有执行,程度控制流不能进入进行解析,里面的东西对外面不可见,因此报错
    
          function test(){
            var m=n=1;
            alert(m);
          }
          test();
          alert(n);
    
    //当test执行后,统统变成全局变量
    
        function test() {
            return 1
              +2
          }
          alert(test())
    

    类似的还有,由群里的abcd提供

        function test() {
            return 1
              2
          }
          alert(test())
    

    类似的还有,由群里的abcd提供

          function test() {
            return
            2
          }
           alert(test())
    

    类似的还有,由群里的abcd提供

         function test() {
            1
            +2-
            3
          } 
          alert(test())
    
    //考察JavaScript的EOS(分号)问题,注意操作符是否存在
    

    上面这题也可以引出这么一题,由群里的abcd提供

          function test() {
            try {
              return 1;
            } finally {
              return 2;
            }
          }
          alert(test())
    
    //一个函数执行后必定返回(return)一个结果,如果原函数体没有return语句必返回undefined。
    //如果里面存在异常处理,finally块中的return 的优先级高于try 块中的return
    
    alert(Number())
    

    类似的还有,由群里的abcd提供

    alert(+"  3   ")
    
    //参见ECMA3-5th的第9.3节与15.7.1节。如果Number([value])的value不存在,则返回0
    //一个字符串被执行了“+”,“-”等操作,相当于调用了Number(str),这时亦即相当于调用了toNumber函数
    //这是一个内建函数,只存在于JS引擎中,对于这个str它会执行trim操作,再执行数字转换,
    //如果能转换基本上转换为十进制(如0x12转为18),如果数字过大会使用指数,
    //如果trim后得到的为Infinity,则直接转换它,如:
         var a = +' Infinity  ';
         alert(typeof a)   //number
    //如果不能转换则返回NaN
    
       var add = function(el){
              alert(el === el+1)
      }
    //求el的值,让el === el+1成立!
    
    //考察javascript的数值范围
    add(Infinity)
    add(Number.MAX_VALUE)
    add(Number.POSITIVE_INFINITY)
    add(Number.NEGATIVE_INFINITY) 
    
     alert([1,2,3,4,5][0..toString.length])
    
         //0..相当于0.0.,这里不能直接写0.toString,
          //因为如果一个点会提示错误 ,JS引擎无法判断是小数点还是"."操作符
          //http://www.cnblogs.com/rubylouvre/archive/2009/11/23/1608601.html
          //接着就是取数字的toString方法的length属性,注意这里并没有执行toString
          //所有函数都一个length属性,为其形参的个数,如
          var fn = function(a,b){};
          fn.length; // 2 
          //toString函数的形参为1,自己翻书吧,因此相当于[1,2,3,4,5][1]
    
      alert('foo'.split('') + [])
    
         //注意空函数的toString
    

    类似的还有,

     alert({a: 1, b: 2}[["b"]])
    

    类似的还有,

     alert(Array(2).join())
    
          alert(i);
          var i = 1;
          function i(){}
          alert(i); 
    
         //优先级问题
    
    try {
       alert(a);
    }
    catch (e) {
       alert(e);
    }
    
    var a = 10;
    
    alert(a);
    
    try {
       alert(b);
    }
    catch (e) {
       alert(e);
    }
    
    b = 20;
    
    alert(b);
    
         //预编译问题
    
    var x = 10;
    
    alert(delete x);
    
    try {
       alert(x);
    }
    catch (e) {
       alert(e);
    }
    
    eval('var y = 20');
    
    alert(delete y);
    
    try {
       alert(y);
    }
    catch (e) {
       alert(e);
    }
    
         //delete操作符,只能正确删除 没有用var 声明的变量
    var x = 10;
    alert(delete x); // false, as has {DontDelete}
    alert(x); // 10
    
    eval("var y = 20");
    alert(delete y); // true
    alert(y); // ReferenceError
    
      var a = Function.prototype.call.apply(function (c) {return c}, [1,4,3]);
      alert(a)
    
    //相当于
          var b = (function(a) {
            return a;
          }).call(0, 4, 3);
    

    压轴,由群里的abcd提供

         Number.prototype.a =
            Number.prototype.b =
            Number.prototype.c =
            Number.prototype;
          function f1() { return 1..a.b.c }
          alert(f1())
    
          //先看Number.prototype.a =  Number.prototype;
          //Number.prototype为Number的一个实例
          //相当于 new Number 得0
          //相当于1..a为0
          //接着是0..b
          //而b也是Number.prototype.b =  Number.prototype;
          //因此0..b为0
          //最后的0..c为一样,为0
    
         //delete操作符,只能正确删除 没有用var 声明的变量
    var x = 10;
    alert(delete x); // false, as has {DontDelete}
    alert(x); // 10
    
    eval("var y = 20");
    alert(delete y); // true
    alert(y); // ReferenceError
    
    alert(parseInt(0.0000001)) alert((0.0000001)) alert(parseInt(0.000001))//Ecma toString 当超过1e-6 就会科学计数法 否则就会 原本显示 alert(parseInt('0.0000001'))//parseInt(变量) 这个变量是number型 就有这个陷阱了 alert((0.000001)) alert(null>-0.5)//转换数字 alert(11<'12')
    
    alert(1 == '1.')
    
    后面调用了Number("1.") ==> parseInt("1.")
    
  • 相关阅读:
    QuickPart
    C#在Word文档指定位置增加内容
    不同linux操作系统的内存管理及安全性
    团队作业(五):冲刺总结7
    团队作业(五):冲刺总结1
    信息安全系统设计与实现:第十四章学习笔记
    电子公文传输系统个人贡献
    OpenEuler 中C与汇编的混合编程
    团队作业(五):冲刺总结2
    OpenEuler 中C语言中的函数调用测试
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1736234.html
Copyright © 2020-2023  润新知