JavaScript中,关于变量和声明的一些坑

作者: 7091a52ac9e5 | 来源:发表于2016-07-15 20:22 被阅读142次

    JavaScript中,关于变量和声明的一些坑

    今天翻译的这篇文章依旧比较基础,是这个系列文章的第三篇。主要讲述了JavaScript中关于变量声明和代码编写时你可能没它留意的一些坑。

    那些熟悉PHP,C,Java语言的人初接触JavaScript时,往往会觉得这是一门非常奇怪的语言。让我们从语言的基本特性:变量以及编码方式等方面来说说这些奇怪的地方。

    代码结构

    分号(;)

    JavaScript的语句直接是用分号(;)来隔离的。

    <html>
    <body>
        <script>
            alert('hello');
            alert('world');
        </script>   
    </body>
    </html>
    

    空格和tab会被自动忽略,上述语句放在一行写也是可以的。

    alert('Hello');   alert('World!');
    

    但是换行符并不会被忽略,换行符起到了分号(;)的功能。

    分号(;)缺失“陷阱”

    JavaScript初学者写多条语句时常常会在分号上栽跟头。

    陷阱1

    下面的语句是不会运行的

    var a="long
        line"
    

    语法分析程序会把它解释为

    var a = "long;
      line ";
    

    有未完结的字符串时(缺少反引号)会报错。

    陷阱2

    下列语句不能得到你想要的结果

    return
      result;
    

    它被解释为

        return;
       result;
    

    这和

    return result;
    

    明显不同。

    如果你想得到正确的答案,转义符()(反斜线)可以帮你。下列语句可以正确运行。

    return \
    result;
    
    var a = "long \
     line "
    

    在每行结尾加上\可以强制忽略换行。

    如果一个表达式没有结束,换行也会被忽略。下面的代码都是可以正常运行的,有些奇怪,不过事实就是这样。

    var a = "long " +
     " line "
     
    var b = 2 + (
     2 + 3
    )
    
    var b = 2 * 2
    + 4
    alert(b)
    
    

    总的来说,在大多数情况下,在结尾省略分号(;)是可行的,但是这样可能会导致一些莫名奇妙的bug,关于是否写分号,一直以来到存在争议,不过越来越多的人认为在结尾处加上分号是一个好习惯。

    变量

    定义

    变量是需要被定义的,在任何地方使用var都不会出错,(ES6有let,const)

    var x;
    

    变量被定义后就可以被赋任何值。

    var x;
    x = 5;
    

    变量也可以一次性定义多个,用逗号分开

    var x,y,z;
    

    还可以一边定义一边赋值

    var x="lalla",y="hahha";
    

    JavaScript中也可以给一个未定义的变量赋值

    x="lalla",y="hahha";
    

    但是这样变量会变为全局变量,会导致一些你不想要的后果。

    变量名称

    变量名的开头必须是字母,$或_,第二位及以后还可以使用数字。

    var $this,
     _private,
     $,
     _,
     $1,
     user15
    

    需要注意的是,JavaScript大小写敏感,A和a是两个不同的变量。

    保留字

    JavaScript中有一批称为保留字的家伙是不能用做变量的,用了在一些浏览器中很可能会报错。这里有一份保留字列表

    变量类型

    主要有

    • number
    • string
    • boolean
    • object(很神奇的东西,以后会详细说到)
    • special values:bull和undefined

    弱类型

    JavaScript中的变量是弱类型的,这意味着一些两点

    • 每个变量都有其类型;
    • 一个变量值得改变会影响它的类型。

    比如说

    var userId = 123;   // 123 is a number
    var name = "John";  // "John" is a string
    
    var userId = 123;   // 123 is a number
    userId = false;     // now userId is boolean
    

    注释

    JavaScript有两种注释方法

    • 单行注释
    // let's see who is here:
    var name = "John"; // My most valued visitor
    
    • 多行注释
    /*
    The following variable has a short name.
    Usually a short name means that the variable is
    temporary and used only in nearest code.
    */
    var a = "John";
    
    

    由{}包起来的多行语句称作块。这在for,if,while,function等中常常用到。

    本文小结

    • 在任何地方使用var 定义变量都不会出错;
    • 变量可以是任何类型
    • 两种注释方式
    • 在语句结束时不要忘了加分号。

    相关文章

      网友评论

        本文标题:JavaScript中,关于变量和声明的一些坑

        本文链接:https://www.haomeiwen.com/subject/yegyjttx.html