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

数字先锋说
• 阅读 3391

今天翻译的这篇文章依旧比较基础,是这个系列文章的第三篇。主要讲述了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 定义变量都不会出错;

  • 变量可以是任何类型

  • 两种注释方式

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

  • 原文Variables and statements

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

点赞
收藏
评论区
推荐文章
Karen110 Karen110
4年前
一篇文章带你了解JavaScript作用域
在JavaScript中,对象和函数也是变量。在JavaScript中,作用域是你可以访问的变量、对象和函数的集合。JavaScript有函数作用域:这个作用域在函数内变化。一、本地JavaScript变量一个变量声明在JavaScript函数内部,成为函数的局部变量。局部变量有局部作用域:它们只能在函数中访问。JS://codeherecann
Python进阶者 Python进阶者
4年前
盘点JavaScript中那些进阶操作知识(下篇)
相信做网站对JavaScript再熟悉不过了,它是一门脚本语言,不同于Python的是,它是一门浏览器脚本语言,而Python则是服务器脚本语言,我们不光要会Python,还要会JavaScript,因为它对做网页方面是有很大作用的。大家好,我是IT共享者,人称皮皮。上篇文章给大家分享了盘点JavaScript中那些进阶操作知识(上篇
小嫌 小嫌
4年前
Javascript中的变量提升
定义JavaScript中奇怪的一点是你可以在变量和函数声明之前使用它们。就好像是变量声明和函数声明被提升了代码的顶部一样。sayHi()//Hithere!functionsayHi()console.log('Hithere!')name'JohnDoe'console.log(name)//JohnDoevarn
菜园前端 菜园前端
2年前
JavaScript的基础语法介绍
原文链接:变量声明在JavaScript程序中,使用一个变量之前应当先声明。变量是使用关键字var来声明的。javascriptvarivarsum20如果未在var声明语句中给变量赋予初始值,那么虽然声明了这个变量,但在给它传入一个值之前,它的初始值就是
Stella981 Stella981
4年前
PHP代码静态分析工具PHPStan
<blockquote最近发现自己写的PHP代码运行结果总跟自己预想的不一样,排查时发现大多是语法错误,在运行之前错误已经种下。可能是自己粗心大意,或者说<codephpl</code检测太简单,不过的确是有一些语法错误埋藏得太深(毕竟PHP是动态语言),那么有没有办法,在代码代码正式运行之前,把语法错误全找出来呢?</blockquote<p
Stella981 Stella981
4年前
JavaScript易错知识点整理
前言本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一些ES6的知识点。JavaScript知识点1.变量作用域vara1;functio
Easter79 Easter79
4年前
TypeScript学习笔记
TypeScript学习笔记TypeScript是JavaScript的超集,任何合法的JS程序都是合法的TypeScript程序TypeScript通过向JavaScript增加可选的静态类型声明来把JavaScript变成强类型程序语言。静态类型声明可约束函数、变量、属性等程序实体。TypeScript语言内
Stella981 Stella981
4年前
JavaScript 非常重要的几个概念
JavaScript是一门比较复杂的语言。如果你是一名JavaScript开发人员,不管处于什么样的水平,都有必要了解JavaScript的基本概念。小编最近的工作涉及到JavaScript,于是本文就介绍了几个非常重要的JavaScript概念,但绝对不是说JavaScript开发人员只需要知道这些就可以了。01变量赋值(值与引用)Java
Stella981 Stella981
4年前
JavaScript变量声明
const,let,var的区别和用法1.const——声明一个只读的常量,在声明的时候给其赋初值,之后不能再进行赋值。1consti0;2console.log(i);//有输出,为0如果对i进行再次赋值则会报错,TypeError:Assignmenttoconstantvariable
可莉 可莉
4年前
20个常用的JavaScript简写技巧
任何编程语言的简写技巧都能够帮助你编写更简练的代码,让你用更少的代码实现你的目标。让我们一个个来看看JavaScript的简写技巧吧。1\.声明变量//Longhandlet x;let y20;//Shorthandlet x,y20;2\.给多个变量赋值我们可以使用数组解构来在一行中给
Stella981 Stella981
4年前
JavaScript声明提升
JavaScript声明提升声明提升就好像把声明(变量声明和函数声明)从它们所在代码中出现的位置移到了最上面。直觉上我们会以为JavaScript代码是由上到下一行一行执行的,但实际上这并不完全正确,还要考虑声明提升的存在。题目1:vara99;//全局变量af();