资讯专栏INFORMATION COLUMN

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

lowett / 1056人阅读

摘要:主要讲述了中关于变量声明和代码编写时你可能没它留意的一些坑。但是换行符并不会被忽略,换行符起到了分号的功能。需要注意的是,大小写敏感,和是两个不同的变量。保留字中有一批称为保留字的家伙是不能用做变量的,用了在一些浏览器中很可能会报错。

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

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

代码结构 分号(;)

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



        

空格和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 定义变量都不会出错;

变量可以是任何类型

两种注释方式

在语句结束时不要忘了加分号。

原文Variables and statements

[深入了解JavaScript系列文章]()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86377.html

相关文章

  • JavaScript 回顾学习:变量

    摘要:变量的分类全局变量可以在任何地方使用的变量局部变量在函数内声明的变量只在函数内有定义,作用域是局部性的什么时候使用当一个数据需要被反复使用时,就要先保存在变量中。 第一篇回顾学习,变量 什么是变量 变量就是在内存中刨一个坑存一个数据,再给这个坑起个名。为什么要给一个加引号呢,因为JavaScript是松散类型的,即一个变量可以用来保存任何类型的数据。变量的分类:全局变量:可以在任何地方...

    KitorinZero 评论0 收藏0
  • JavaScriptthis

    之前关注了一个公众号: JavaScript,里面详细描述了this的各种情况,在此总结一下.只考虑当宿主环境是浏览器的时候,并且处于非严格模式下:this是在运行时绑定的,并不是在编写时绑定的,this的绑定只取决于函数的调用方式.在全局范围内,this等价于window对象。 console.log(this === window); //true 在全局范围内,用var声明一个变量和给th...

    tain335 评论0 收藏0
  • 理解 Javascript 变量作用域

    摘要:在中,没有块级作用域一说在或者等语言中,等语句块内可以包含自己的局部变量,这些变量的作用域是这些语句的语句块,而在中,不存在块级作用域的说法。作用域链如果要深入理解中变量的作用域,那就必须拿出作用域链这个终极武器。 Javascript 这门语言与其他的大部分语言相比,有很多特殊性,这是很多人喜欢它或者讨厌它的原因。其中变量的作用域问题,对很多初学者来说就是一个又一个「坑」。 变量的...

    Rocture 评论0 收藏0
  • 前端_JavaScript

    摘要:为此决定自研一个富文本编辑器。例如当要转化的对象有环存在时子节点属性赋值了父节点的引用,为了关于函数式编程的思考作者李英杰,美团金融前端团队成员。只有正确使用作用域,才能使用优秀的设计模式,帮助你规避副作用。 JavaScript 专题之惰性函数 JavaScript 专题系列第十五篇,讲解惰性函数 需求 我们现在需要写一个 foo 函数,这个函数返回首次调用时的 Date 对象,注意...

    Benedict Evans 评论0 收藏0
  • 谈谈JavaScript词法环境闭包(一)

    摘要:换句话说,定义在闭包中的函数可以记忆它被创建时候的环境。词法环境的概念定义摘自百科。一个词法环境由一个环境记录项和可能为空的外部词法环境引用构成。中使用词法环境管理静态作用域。 一个资深的同事在我出发去面试前告诫我,问JS知识点的时候千万别主动提闭包,它就是一个坑啊!坑啊!啊! 闭包确实是js的难点和重点,其实也没那么可怕,关键是机制的理解,可以和函数一起单独拿出来说说,其实关于闭包的...

    AlphaWatch 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<