01-JS中字面量与变量
01-JS中字面量与变量
一、直接量(字面量)
字面量:英语叫做literals,也做直接量,看见什么,它就是什么。
(一)数字的字面量
数字的字面量,就是这个数字自己,并不需要任何的符号来界定这个数字。
例如:数字8 就是数字8,没有代表其他值,这就是字面量(需要注意数字也有进制问题)
1.整数
JS中,数字的整数字面量可以有三种进制:
10进制:普通的数字就是十进制
8进制:如果以0、0o、0O开头数字字面量是八进制,八进制只包括数字0-7
16进制:如果以0x,0X开头数字字面量是十六进制。十六进制整数可以包含(0-9)和字母a-f或A-F
(1)八进制
<script>
// 以0开头,是八进制;显示的时候会以十进制显示
console.log(017); //15 1*8+7=15
console.log(0o17); //15
console.log(0O17); //15
console.log(044); //36 4*8+4=36
// 注意:八进制只能出现0-7这8个数字,如果表示不合法,
// 那么JS将自动的认为你输入错了,从而用十进制显示
console.log(080); //80
// 但是以0o、0O开头的数字,如果后面写错了,控制台报错
// Uncaught SyntaxError: Invalid or unexpected token
console.log(0o88); //报错
console.log(0O88); //报错
</script>
(2)十六进制
<script>
// 十六进制
console.log(0xff); //255
console.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); //十六进制
</script>
2.浮点数(小数或指数)
计算机世界中,小数称为“浮点数”。
指数就是:允许使用e来表示乘以10的几次幂:
<script>
console.log(3.14159); //3.14159
console.log(.35); //0.35
console.log(5e5); //500000
console.log(5.2e5); //520000
console.log(1e-4); //0.0001
// 注意:只有十进制有小数的字面量,八进制、十六进制没有小数的字面量,所以小数没有进制之分
</script>
3.特殊字面量
(1)Infinity 无穷大
<script>
// 试图输出一个非常大的数字
console.log(3e9858987895547899); //Infinity
// 至于多大的数字能生成无穷大,不同的浏览器不一样,不要管
// 可以是负无穷大
console.log(-6e9858987895547899); //-Infinity
// 可以在控制台输出无穷大,注意大小写:
console.log(Infinity);
</script>
(2)NaN
英文全名叫做not a number,不是一个数
它不是一个数,却是一个字面量
<script>
console.log(0/0); // 输出NaN
</script>
(二)字符串的字面量
字符串是一个术语,说白了就是我们说的话。(自己理解的)
1.字符串字面量的书写方式
字符串的字面量有限定符,就是必须用双引号、单引号包裹起来。字符串被限定在同种引号之间;也就是说,必须是成对单引号或成对双引号。
<script>
// 字符串用双引号包裹,或者单引号
console.log("是小蔡啊");
console.log('是小蔡啊');
// 不加引号是错误的
// console.log(是小蔡啊); //是小蔡啊 is not defined
// 注意引号必须是同种引号,混用错误
// console.log('混用错误啊");
// 如果一个数字,用引号引起来,那么就是字符串了
console.log("兄弟,你今天干饭了吗?");
console.log("33");
// 正常情况下,引号内部可以有不同种的引号,比如双引号里面可以有单引号
// 双引号中用单引号
console.log("是'小蔡'啊");
console.log('是"小蔡"啊');
</script>
2.特殊字符
在字符串中可以使用一些特殊字符,他们有特定的含义
\n New line 换行符
\t Tab tab缩进
// 转义字符
alert("你们\n是\n不是\n已经都学过了");
这里 \ 反斜杠就是我们通常所说的转义符号,可以将没有意义的字面n转为有意义的换行,
同样换行符也可以将有意义的符号转为没有意义的不同字符
在使用字符串中可以使用转义字符
' 单引号
\ "双引号
\ 反斜杠
// 使用反斜杠\转义字符
console.log("是\"小蔡\"啊");
二、变量
变量(Variables),和高中数学中的x、y、z很像,它们此时不是字母,而是代指一些值的符号。
它和直接量不同,直接量5,就是数字5;直接量"你好"就是字符串"你好"
(一)整体了解
<script>
// 定义一个变量
var a;
// 赋值
a = 200;
// 输出变量a
console.log(a)
// 这个语句将会引发错误,因为b没有进行定义
console.log(b); //b is not defined
</script>
我们用var关键字来定义变量,所谓的关键字就是一些特殊功能的单词,关键字后面要有空格。
var 就是英语variables变量的缩写,表示定义一个变量,一旦你
var a;
你的电脑内存中,就会开辟一个空间,命名为a,等待你给这个变量空间存放一定的值。
一旦声明变量后,就可以给变量赋值,js中给变量赋值用等号,等号右边赋值给左边。
a = 200;
现在a变量的值就是200,所以我们输出
console.log(a);//控制台输出变量值为200
(二)变量必须先声明,再使用
使用一个变量,必须先进行一个var,才能使用。var这个过程可以叫做声明declaration,也可以叫做定义definition。叫声明一个变量,或定义一个变量。
如果变量未声明就直接使用就会报错:
console.log(b); //Uncaught ReferenceError: b is not defined
// ReferenceError引用错误
// b is not defined b未定义
(三)变量命名规则
变量的名字就是标识符,任何标识符的命名都需要一定的规则:
JS中标识符的定义规则,可先理解为变量的规则,以后我们还会接触到其他标识符
1.由字母、下划线(_)、美元($)符号、数字(0-9)组成
2.不能以数字开头
也就是说,一个标识符必须由字母、下划线、美元符号开头,后续可以有字母、下划线、美元符号、数字
3.严格区分大小写
所以A和a不是同一个变量
4.不要使用中文变量
5.不能使用关键字和保留字
关键字(js已经赋予特殊功能的单词):
break、else、new、var、case、finally、return、void、catch、for、switch、while、continue、function、this、with、dafault、if、throw、delete、in、try、
保修字(js预定可能未来要使用的字):
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
(四)变量的赋值
变量的赋值用等号,等号就是赋值符号,在JS中等号没有其他的含义,等号就表示赋值。
1.可以将定义和赋初值写在一起
var a = 200;
console.log(a); //200
var a = 100;
var b = 200;
a = b; //在改变a变量的值,a的值变为200,b的值不变
console.log(a);
console.log(b);
2.变量只要var一次就可以了
变量值需要var一次,后面改变变量的值的时候,就不需要var了,可以直接改变它的值。
var a = 200;
a = 50;
console.log(a); //50
3.var 后没有赋值的变量
如果一个变量,仅仅被var了,但是没有被赋初值,此时这个变量的值就是undefined
//定义不赋初值,值是undefined
var m;
console.log(m); //输出undefined
实际上我们使用var后,就已经定义了这个m,只不过这就是浏览器的一个规则,如果这个变量没有被赋初值,那么这个变量就视为没有“定义完成”。值就是undefined,就是空值的意思。
(五)不写var的情况
//不写var的时候实际上现在看不出来区别,今后就知道是一个全局变量
abc = 123;
console.log(abc); //123
定义abc的时候没有写var,程序就没有报错,说明这个abc变量已经被定义成功了。现在看不出区别。其实var定义了一个全局变量,作用域是不能控制的。
(六)同时定义多个变量
定义多个变量时,中间用逗号隔开
var a = 7, b = 6, c = 9;
console.log(a);
console.log(b);
console.log(c);
(七)变量声明的提升
这是js特有的一个特点
我们先去改变变量的值,然后定义变量,由于JS有一个机制,叫做变量声明提升,所以现在程序在执行前已经看见这个程序有一行定义变量,所以就会提升到程序开头去运行。
a = 200;
var a; //这行定义变量会自动提升到所有语句之前
console.log(a); //200
注意:js只提升变量的声明,而不能提升变量的赋初值。
//提升只提升变量声明,而不提升赋初值,输出undefined
console.log(a);
var a = 100;
等价于
var a; //自动升级
console.log(a); //undefined
a = 100; //赋初值还留在原地
变量的传递
var a = 1;
var b = 2;
var c = 3;
a = b; //这里改变a的值,a的值变为2,b的值不变仍是2
b = c; //这里改变b的值,b的值变为3,c的值不变仍是3
c = a; //这里改变c的值,c的值变为2,a的值不变仍是2
console.log(a); //2
console.log(b); //3
console.log(c); //2
(八)区分变量还是直接量
变量的时候,不能加引号。如果变量加上引号,就变成字符串的直接量了。
var a = 200;
console.log("a"); //a
var a = "大家好";
conslog.log("a")
引号是“字符串”的定界符,所以在双引号里面的a已经失去了变量的意思,就是一个字符串a。
01-JS中字面量与变量的更多相关文章
- JS基础二--字面量和变量
/* 字面量,都是一些不可改变的值, 比如:1 2 3 4 5 字面量都是可以直接使用,但是我们一般不会直接使用字面量. 变量,变量可以用来保存字 ...
- json,json对象以及js对象字面量的区别
从定义看: json:一种数据交换格式 json对象:js的一个内置对象,拥有JSON.stringify()和JSON.parse()两个方法 js对象字面量:封闭在花括号对({})中的一个对象的零 ...
- 浅谈 js 正则字面量 与 new RegExp 执行效率
原文:浅谈 js 正则字面量 与 new RegExp 执行效率 前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化 ...
- [js]js的惰性声明, js中声明过的变量(预解释),后在不会重新声明了
js的惰性声明, js中声明过的变量(预解释),后在不会重新声明了 fn(); // 声明+定义 js中声明过一次的变量,之后在不会重新声明了 function fn() { console.log( ...
- js中三种定义变量 const, var, let 的区别
js中三种定义变量的方式const, var, let的区别 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 ...
- 深入探究js中的隐式变量声明
前两天遇到的问题,经过很多网友的深刻讨论,终于有一个相对可以解释的通的逻辑了,然后我仔细研究了一下相关的点,顺带研究了一下js中的隐式变量. 以下文章中提到的隐式变量都是指没有用var,let,con ...
- 浅谈JS中 var let const 变量声明
浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...
- JS基础_字面量和变量
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- java中字面量,常量和变量之间的区别(附:Integer缓存机制)
一.引子 在各种教科书和博客中这三者经常被引用,今天复习到内存区域,想起常量池中就是存着字面量和符号引用,其实这三者并不是只在java中才有,各个语言中都有类似的定义,所以做一下总结,以示区分. 二. ...
随机推荐
- others_babystack
一道泄露canary+rop常规的题. 这道题让我学习到了,原来canary的最后一位是\x00,又因为是小端存储,所以在内存中我位置是在开头的. 来,下载文件检查一下保护. 开启了canary和nx ...
- 【译】使用 Visual Studio 调试外部源代码
您是否曾经需要调试并进入依赖于 NuGet 或 .NET 库的代码,而这些库并没有构建为您的解决方案的一部分? 现在,调试它们并不像调试作为解决方案一部分的项目那么容易.从 Visual Studio ...
- Kafka从入门到放弃(三)—— 详说消费者
之前介绍了Kafka以及生产者,包括它的一些特性和参数,这回写一下消费者. 之前没看得可以点击链接阅读. Kafka从入门到放弃(一) -- 初识Kafka Kafka从入门到放弃(二) -- 详说生 ...
- 误入 GitHub 游戏区,意外地收获颇丰
这天中午,我和往常一样就着美食视频吃完午饭,然后起身泡了一杯"高沫". 我闻着茶香享受着午后的阳光,慵懒地坐在工位上习惯性的打开 GitHub 游荡,酝酿着睡意. 误打误撞,我来到 ...
- Asp.Net Core基础篇之:白话管道中间件
在Asp.Net Core中,管道往往伴随着请求一起出现.客户端发起Http请求,服务端去响应这个请求,之间的过程都在管道内进行. 举一个生活中比较常见的例子:旅游景区. 我们都知道,有些景区大门离景 ...
- MySQL 定时器
mysql定时器是系统给提供了event,而oracle里面的定时器是系统给提供的job.废话少说,下面创建表:create table mytable (id int auto_increment ...
- worksocket使用Nginx进行反向代理
配置文件 map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream weoskceturl{ serv ...
- JAVA导入(读取)Excel中的数据(支持xls与xlsx文件)
一.导入jar包 poi-3.7.jarpoi-scratchpad-3.7.jarpoi-examples-3.7.jarpoi-ooxml-3.7.jarpoi-ooxml-schemas-3.7 ...
- JAVA整合Redis使用redisTemplate清除库中的所有键值对数据
JAVA整合Redis使用redisTemplate清除库中的所有键值对数据,清除所有缓存数据 Set<String> keys = redisTemplate.keys("*& ...
- C. Watching Fireworks is Fun(Codeforces 372C)
C. Watching Fireworks is Fun time limit per test 4 seconds memory limit per test 256 megabytes input ...