第一节:JavaScript中字面量与变量

一.直接量(字面量)

在学习JavaScript变量之前,先认识一下直接量(字面量)

字面量:英语叫做literals,也做直接量。看见什么,它就是什么。

咱们先学习数字和字符串的字面量。剩余的字面量类型,之后在讲

1. 数字的字面量

数字的字面量,就是这个数字自己,并不需要任何的符号来界定这个数字。

例如:

数字8 就是数字8 不比表示其他值,这就是字面量

但是也需要注意, 数字也有进制问题,

1.1 整数

JavaScript中,数字的整数字面量可以有三种进制:

10进制:普通的数字就是十进制

8进制:如果以0、0o、0O开头数字字面量是八进制,八进制只包括数字0~7

16进制:如果以0x,0X开头数字字面量是十六进制。十六进制整数可以包含(0-9)和字母 a-f 或 A-F

1.1.1 八进制

<scripttype="text/javascript">

//以0开头,是八进制;显示的时候会以十进制显示console.log(017);//15 //1*8+7=15  console.log(0o17);//15console.log(0O17);//15console.log(044);//4*8+4=36 ,显示36console.log(010);//8console.log(0o36);//30console.log(0O36);//30</script>

注意,八进制只能出现0~7这8中数字,如果表示不合法,那么JS将自动的认为你输入错了,从而用十进制进行显示:

console.log(080);//80 //以0开头,按理说是八进制,但是后面的数字错了,所以以十进制显示

但是以0o开头、0O开头的数字,如果后面写错了,控制台报错!

// 如果是0o开头的,后面的数字错了,对不起,不转为10进制了,控制台报错!console.log(0o88);//报错console.log(0O88);//报错// 控制台报错//Uncaught SyntaxError: Invalid or unexpected token//语法错误

1.1.2 十六进制

// 十六进制:console.log(0xff);//255console.log(0x2b);//43

如果后面有错误的写法,那么控制台报错:

console.log(0x2g);// 控制台报错//Uncaught SyntaxError: Invalid or unexpected token//语法错误

总结:认识下面字面量为什么进制的数字字面量

console.log(16);// 十进制console.log(020);// 八进制console.log(0o20);// 八进制console.log(0O20);// 八进制console.log(0x10);// 十六进制console.log(-0xf);// 十六进制

1.2 浮点数(小数或指数)

小数的字面量也很简单,就是数学上的点。计算机世界中,小数称为“浮点数”。

指数就是:允许使用e来表示乘以10的几次幂:

console.log(3.1415);//3.1415console.log(.35);//.35 如果整数位数是0,可以不写console.log(5e5);//500000console.log(5.2e5);//520000console.log(1e-4);//0.0001

注意:

只有十进制有小数的字面量,八进制、十六进制没有小数的字面量。所以小数没有进制之分

那么有个问题,JavaScript里的数字到底最大能显示多大的数字

// 非常大的数字,无穷大console.log(3e45645645645646);// 非常小的数字,负无穷大console.log(-3e45645645645646);

1.3 特殊字面量

1.3.1Infinity 无穷大

试图输出一个非常大的数字:

// 非常大的数字,无穷大console.log(3e45645645645646);//Infinity

至于多大的数字能生成无穷大,不同浏览器不一样,不要管。

可以是负的无穷大:

console.log(-5e31415926);//-Infinity

我们可以直接在控制台输出无穷大,注意大小写:

console.log(Infinity);

1.3.2NaN

英语全名叫做not a number,不是一个数。

比较有意思的是,这个“不是一个数”他居然是一个数字字面量。

// 输出NaNconsole.log(0/0);// NaN

1.4 总结一下,

数字字面量有整数字面量(十进制、16进制、八进制),

浮点数字面量(要记住e),

特殊字面量:Infinity,NaN

2.  字符串的字面量

字符串是一个术语,说白了就是我们人说的话。

2.1 字符串字面量的书写方式

字符串的字面量有限定符,就是必须用双引号、单引号包裹起来。字符串被限定在同种引号之间;也就是说,必须是成对单引号或成对双引号。

console.log("今天你好帅哦");//  字符串用双引号包裹,或者单引号console.log("今天天气很好");console.log('今天天气很好');

不加引号是错误的

//  不能不加引号,这是错误的:console.log(今天天气很好);

注意引号必须是同种引号,混用错误

console.log('嘻嘻");

如果一个数字,用引号引起来,那么就是字符串了:

console.log("兄弟,你中午吃了几碗饭?");console.log("3");

正常情况下,引号内部可以有不同种的引号,比如双引号里面可以有单引号:

// 双引号中用单引号console.log("你笑起来像'花儿'一样好看");// 单引号中用双引号console.log('你笑起来像"花儿"一样好看');

2.2 特殊字符

在字符串中可以使用一些特殊字符,他们有特定的含义

\n    New line    换行符

\t    Tab            tab缩进

//转义字符alert("你们\n啊\n怎么可以\n那么可爱呢");

这里\反斜杠就是我们通常所说的转义符号, 可以将没有意义的字面n转为有意义的换行,

同样换行符也可以将有意义的符号转为没有意义的不同字符

在使用字符串中可以使用转义字符,

'    单引号

\”    双引号

\    反斜杠

// 使用反斜杠\转义字符 console.log("你笑起来像\"花儿\"一样好看");

二.变量

变量(Variables),和高中数学中的x、y、z很像,它们此时不是字母,而是代指一些值的符号。

它和直接量不同,直接量5,就是数字5;直接量”你好”就是字符串“你好”。

现在这个变量不一样了,你看见一个a,实际上它不是字母a,而是里面蕴含的不同的值。

1. 整体了解

<scripttype="text/javascript">//定义一个变量vara;//赋值a=200;//输出变量aconsole.log(a);// 这个语句将会引发错误,因为b没有进行定义console.log(b);</script>

我们使用var关键字来定义变量所谓的关键字就是一些有特殊功能的单词,关键字后面要有空格。

var就是英语variables变量的缩写,表示定义一个变量。一旦你

vara;

你的电脑内存中,就会开辟一个空间,命名为a, 等待你给这个变量空间存放一定的值,

一旦变量声明后,就可以给变量赋值,

JS中给变量赋值用等号,等号右边的值赋给左边。

a=200;

现在a变量的值就是200。所以我们输出

console.log(a);

控制台就会输出a变量的值,就是200

2. 变量必须先声明,在使用

使用一个变量,必须先进行一个var,才能使用。var这个过程可以叫做声明declaration,也可以叫做定义definition。叫声明一个变量,或定义一个变量.

如果变量未声明就直接使用,会怎么样呢,看下

console.log(n);//这个c没有被var过,所有会报错

因为n没有被声明,所以n现在不是一个变量,系统不认识这个n的。就会抛出引用错误。

console.log(n);//Uncaught ReferenceError: n is not defined//ReferenceError    引用错误//n is not defined  n未定义

3. 变量命名规则

变量的名字就是标识符(identifiers),任何标识符的命名都需要遵守一定的规则:

JS中标识符的定义规则,可先理解为变量的规则,以后我们还会接触到其他标识符

由字母、下划线(_)、美元($)符号、数字(0-9)组成

不能以数字开头

也就是说,一个标识符必须由字母、下划线、美元符号开头,后续可以有字母、下划线、美元符号、数字

严格区分大小写

所以A和a不是同一个变量

不要使用中文变量名

不能使用关键字和保留字

那么什么是关键字 和保留字呢

关键字=>js已经赋予特殊功能的单词

保留字=>js预订可能未来要使用的字

关键字:

break、else、new、var、 case、  finally 、 return、 void 、 catch  、for  、switch 、 while 、 continue、  function  、this 、 with 、default 、 if 、 throw 、 delete 、 in 、  try 、do 、 instranceof、  typeof

保留字:

abstract 、 enum  、int 、 short 、 boolean  、export  、interface、  static、  byte  、extends 、 long 、 super 、 char 、 final  、native  、synchronized 、 class  、float 、 package  、throws 、 const  、goto  、private 、transient 、 debugger 、 implements  、protected 、 volatile 、 double  、import  、public

示例:

// // 以下都是合法的变量名vara;varA;varb333;var_abc;var$;var$o0_0o$;var________;var_;// 以下都是非法的变量名var123a;var12_a;varabc@163;varabc¥;varvar;varclass;

注意: 关键字,保留字不用可以的去记忆, 在未来学习的过程中会接触到一大部分关键字保留字,

4. 变量的赋值

变量的赋值用等号,等号就是赋值符号,在JS中等号没有其他的含义,等号就表示赋值。

vara;//定义a=200;//赋初值console.log(a);

运行结果:200

4.1  可以将定义和赋初值写在一起:

vara=200;console.log(a);//200vara=100;varb=200;a=b;//在改变a变量的值,a的值变为200。b的值不变。console.log(a);console.log(b);`

4.2 变量只要var一次就可以了

变量只需要var一次,后面改变变量的值的时候,就不需要var了,可以直接改变它的值。

vara=200;a=50;//不需要写varconsole.log(a);//50

4.3 var后没有复制的变量

如果一个变量,仅仅被var了,但是没有被赋初值呢,此时这个变量的值就是undefined;

// 定义不赋初值,值是undefinedvarm;console.log(m);//输出undefined

实际上我们使用var后,就已经定义了这个m,只不过这就是浏览器的一个规矩,如果这个变量没有被赋初值,那么这个变量就视为没有“定义完成”。值就是undefined。就是空值的意思

5. 不写var的情况呢

// 不写var的时候实际上现在看不出来区别,今后就知道是一个全局变量abc=123;console.log(abc);//123

定义abc的时候没有写var,程序没有报错,说明这个abc变量真的已经被定义成功了。现在你看不出来var和不var的区别,感觉都是成功的,但是日后你就会知道,不写其实var定义了一个全局变量,作用域是不能控制的。

知道就行,自己千万不要这么干

6. 同时定义多个变量

定义多个变量时,中间用逗号隔开

vara=7,b=9,c=10;console.log(a);console.log(b);console.log(c);

7. 变量声明的提升

这是js特有的一个特点,其他语言都没有这个特点。

我们现在先去改变变量的值,然后定义变量,

由于JS有一个机制,叫做变量声明的提升,所以现在程序在执行前会已经看见这个程序中有一行定义变量,所以就会提升到程序开头去运行。

a=200;vara;//这行定义变量会自动提升到所有语句之前console.log(a);//200

记住,js只能提升变量的声明,而不能提升变量的赋初值

//提升只能提升变量声明,而不能提升赋初值。输出undefinedconsole.log(a);vara=200;

等价于

vara;//自动升级console.log(a);// undefineda=200;//赋初值还留在原地

变量的传递

vara=1;varb=2;varc=3;a=b;//这里改变a的值,a的值变为2,b的值不变仍是2b=c;//这里改变b的值,b的值变为3,c的值不变仍是3c=a;//这里改变c的值,c的值变为2,a的值不变仍是2console.log(a);//2console.log(b);//3console.log(c);//2

8. 区分变量还是直接量

变量的时候,不能加引号。如果变量加上引号,就变成字符串的直接量了。

vara=200;console.log("a");//avara="大家好";console.log(a);

引号是“字符串”的定界符,所以在双引号里面的a已经失去了变量的意思,就是一个字符串a。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352

推荐阅读更多精彩内容