zoukankan      html  css  js  c++  java
  • 一些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.")
    
  • 相关阅读:
    _bzoj1061 [Noi2008]志愿者招募【最小费用最大流】
    _bzoj2243 [SDOI2011]染色【树链剖分】
    _bzoj1013 [JSOI2008]球形空间产生器sphere【高斯消元】
    _bzoj1002 [FJOI2007]轮状病毒【瞎搞】
    leetcode 273 Integer to English Words
    leetcode 12 Integer to Roman
    leetcode 1071 Greatest Common Divisor of Strings
    lc6 ZigZag Conversion
    lc13 Roman to Integer
    leetcode 171 Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1736234.html
Copyright © 2011-2022 走看看