• 汤姆大叔博客手记


    汤姆大叔博客手记

    通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的。无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的。这表明,在技术上,隐式全局变量并不是真正的全局变量,但它们是全局对象的属性。属性是可以通过delete操作符删除的,而变量是不能的。

    // 定义三个全局变量
    var global_var = 1;
    global_novar = 2; // 反面教材
    (function () {
       global_fromfunc = 3; // 反面教材
    }());
    
    // 试图删除
    delete global_var; // false
    delete global_novar; // true
    delete global_fromfunc; // true
    
    // 测试该删除
    typeof global_var; // "number"
    typeof global_novar; // "undefined"
    typeof global_fromfunc; // "undefined"
    

    hoisting(变量提升)

    //反例
    myname = "global"; // 全局变量
    function func() {
        alert(myname); // "undefined"
        var myname = "local";
        alert(myname); // "local"
    }
    func();
    

    parseInt

    var month = "06",
    year = "09";
    month = parseInt(month, 10);
    year = parseInt(year, 10);
    

    此例中,如果你忽略了基数参数,如parseInt(year),返回的值将是0,因为“09”被当做8进制(好比执行 parseInt( year, 8 )),而09在8进制中不是个有效数字。

    这是原文中汤姆大叔的解释,但是按照现在的规范这个解释是错误的。看看这个栗子:

    //ECMAScript 3 认为是56(八进制),ECMAScript 5 认为是70(十进制)
    var num = parseInt("070");
    

    引用高级程序设计:

    在ECMAScript 3 JavaScript 引擎中,"070"被当成八进制字面量,因此转换后的值是十进制的56。而在ECMAScript 5 JavaScript 引擎中,parseInt()已经不具有解析八进制值的能力,因此前导的零会
    被认为无效,从而将这个值当成"70",结果就得到十进制的70。在ECMAScript 5 中,即使是在非严格模式下也会如此。

    为了消除在使用parseInt()函数时可能导致的上述困惑,可以为这个函数提供第二个参数:转换时使用的基数(即多少进制)

    所以对于上面汤姆大叔举的例子,假设parseInt(09),那么输出的正确值应该是9,因为ES5已经不再解析前导,而是直接当作10进制进行解析了。

    接着引用的内容,我们parseInt()的第二个参数指的就是把数字按照几进制进行解析,所以有:

    parseInt(1111,2)
    //15
    
    parseInt(3333,2)
    //NaN
    

    说完这些我们再接回原来大叔的原文

    替换方法是将字符串转换成数字,包括:

    +"08" // 结果是 8
    Number("08") // 8
    

    这些通常快于parseInt(),因为parseInt()方法,顾名思意,不是简单地解析与转换。但是,如果你想输入例如“08 hello”,parseInt()将返回数字,而其它以NaN告终。



  • 相关阅读:
    iphone5刷机教程
    ios开发之--/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby: bad interpreter: No such file
    浅谈iPhone OS(iOS)架构
    ios开发之--使用xib适配iPhone X
    ios开发之--armv7,armv7s,arm64,i386,x86_64详解
    ios开发之--UIButton中imageView和titleLabel的位置调整
    gem install cocoapods ERROR: While executing gem ... (Gem::FilePermissionError)
    ios开发之NSString用strong还是用copy?
    ios开发之--高德地图以及自定义大头针和气泡、导航
    iOS
  • 原文地址:https://www.cnblogs.com/jelly7723/p/5551116.html
Copyright © 2020-2023  润新知