变量
1. 概述
变量(variables) 是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中存储的数据,甚至数据可以修改。
变量相当于一个容器,内部可以存储任意类型的数据,使用变量时,用的是内部存储的数据。
本质:变量是程序在内存中申请的一块用来存放数据的空间
2. 变量使用
变量在使用时,分为两步:声明变量、赋值
(1) 声明变量
例如:声明一个名称为age的变量: var age;
变量声明又叫做定义变量、创建变量。
变量在使用前,必须先有定义,如果没有定义,会出现引用错误。
定义方法:使用一个 var 的关键字进行定义,后面必须加一个空格,空格后面自定义变量名
使用var关键字声明变量后,计算机会自动为变量分配内存空间
注意:现在不怎么使用var,es6基本都用const、let
(2) 变量赋值
例如:给age这个变量赋值为10:age = 10;
(等号 = 左右习惯空格隔开)
变量定义之后,初始时没有进行赋值,内部有一个默认存储的值叫undefined(未定义),表示变量内部未赋值,可以存储数据了。
变量赋值的方式:通过等号 = 赋值,等号右边的值赋值给左边的变量。
变量赋值时:内部可以存储任意类型的数据,甚至是一个变量。赋值过程中,等号右侧的变量使用的是存储的数据。
变量赋值的几种情况:
-
变量参与赋值过程时,等号左变右不变。
var a;
a = 3;
var b;
b = a + 3;
-
变量的赋初值过程可以与声明过程写在一起。
var c = 'hello';
-
变量一次定义,可以多次等号赋值,原有的值被覆盖,以最后一次赋的值为准
var c = 'hello';
c = 3;
c = c + 2;
console.log(c);
// 输出5
-
一个关键字 var 可以同时定义多个变量,并且都赋初值。多个变量之间用英文逗号进行分隔,最 后一个变量后面使用分号进行结尾
var a = 1, b = 2, c = 3;
(3) 变量的初始化
声明一个变量并赋值,称之为变量的初始化
(4) 变量命名规范
必须遵守的,否则报错
- 由字母、数字、下划线、美元符号$组成,不能以数字开头
- 字母区分大小写,A和a表示不同
- 不能是关键字和保留字,关键字是指js中有特殊功能的小词语,比如 var、for 等
- 保留字指的是现在没有特殊功能,但是将来新语法中有可能作为关键字使用。
建议遵守的,不遵守不会报错
- 变量名必须有意义
- 遵守驼峰命名法。多个单词组合而成的,第一个单词首字母小写,后面单词的首字母需要大写。 例如:userName、userPassword
- 注意:尽量不要直接使用name作为变量名
案例1:弹出一个输入框,提示用户输入姓名,弹出一个对话框,输出用户刚才的姓名
var myname = prompt('请输入您的名字');
alert(myname);
案例2:交换两个变量a、b的值,(使用一个临时变量c来做中间存储)
var num1 = 'red';
var num2 = 'green';
var temp;
temp = num1;
num1 = num2;
num2 = temp;
console.log(num1, num2);
数据类型
1. 简介
在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型
数据类型就是数据的类别型号
2. 变量的数据类型
JavaScript 语言是一门动态类型的语言,变量并没有一个单独的数据类型,而是会随着内部存储数据的变化,数据类型也会发生变化。
在代码运行时,变量的数据类型是由JS引擎根据等号= 右边变量值的数据类型来判断的,运行完毕后,变量就确认了数据类型
var age = 18; // 这是一个数字型
var color = 'pink'; // 这是一个字符串
JavaScript拥有动态类型,同时也意味着相同的变量可用作不同的类型
var x = 6; // x为数字
var x = 'pink'; // x为字符串
3. 数据类型分类
简单数据类型:Number、String、Boolean、Undefined、Null
复杂数据类型:Object
4. 检测数据类型
(1) 获取检测变量的数据类型
-
使用 typeof 的方法进行数据检测。
-
检测方式:在 typeof后面加小括号 () 执行,将要检测的数据放在小括号内部。
console.log(typeof(1)); // number
console.log(typeof(2.4)); // number
console.log(typeof(Infinity)); // number
console.log(typeof(NaN)); // number
console.log(typeof('汉字内容')); //string
console.log(typeof(undefined)); //undefined
console.log(typeof(true)); // boolean
console.log(typeof(false)); // boolean
console.log(typeof(null)); // object
console.log(typeof(67 + 78)); //会运算后再判断为number
-
也可以将 typeof 作为关键字,后面加空格,空格后添加数据的方式,检测数据。
console.log(typeof 67); // 建议用第一种
console.log(typeof 67 + 78); //一步步往后 输出numbe78
提示:也可使用谷歌浏览器控制台,快速的查看数据,字符串的颜色是黑色的,数值类型是蓝色的,布尔类型也是蓝色的,undefined和null是灰色的
(2) 字面量
字面量(literal)是用于表达一个固定值的表示法,又叫常量。
通俗的理解,字面量就是所见即所得,js 程序执行到代码中的字面量,会立即知道它是什么类型的数据,值是多少。
可以用于表示固定值,比如:数字、字符串、undefined、布尔类型的字面值等
简单数据类型(基本数据类型)
1. Number数字型
包含整型值和浮点型值,如21,0.21,默认值是0
(1) 整数
整数可以被表示成十进制(基数为10)、八进制(基数为8)以及十六进制(基数为16)。
- 十进制是最基本的数值字面量格式。
-
八进制字面值必须带前缀0、0O、0o 。八进制整数只能包括数字0-7。
-
十六进制的前缀是0x或0X。后面可以包含数字(0-9)和字母af或AF。
在进行算术计算时或者参与程序,所有八进制和十六进制的数字都会被转换成十进制。
特殊的:八进制中,如果以0开头,每个位数上有超过0-7之间的数字出现,也就是8/9,强 制忽视前面的0,直接将后面数字当做十进制
(2) 浮点数
- 浮点数不区分进制,所有的浮点数都是十进制下的数字。
- 注意:如果浮点数是大于0 小于1的,可以省略小数点前面的0不写。
-
浮点数的精度问题:浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数(例0.1 + 0.2; 结果不是 0.3,而是:0.30000000000000004)
-
科学计数法:e4相当于10的4次方(例如1.2e4 = 12000,1.2e-4 = 0.00012)
(3) 特殊值
-
Infinity 无穷
-
NaN
- not a number表示不是一个正常的数,但是还是一个 Number 类型的数字。这个数字没办法用前面的表示方法表示。
- NaN 与任何值都不相等,包括他本身。
- isNaN(): 判断一个数据是不是一个NaN,若是数字返回false,若不是数字返回true
2. String字符串型
字符串是由任意个数的有序或无序的字符组成的串
组成:字母、汉字、特殊符号、空白等。
字符串字面量写法:是用一对单引号(’ ')或双引号(“ ”)及引号内的字符构成,引号中间的字符可以有任意多个,也可以是没有字符的空字符串。
注意:字符串中如果字符包含了双引号,则其外部应该由单引号标示,反之相同(外双内单 / 外单内双)
引号中间添加空格时叫空白字符串,引号中间没有字符叫空字符串
(1) 字符串转义字符\
字符串中,有一些特殊功能的字符不能直接书写,还有一些特殊效果不能直接书写,这时,可以使用转义符 \ 对这些字符进行转义。
转义字符都是以 \ 开头,常用的如下(转义字符要写到引号里面):
\n ——换行符 、 \a ——响铃
\\ ——反斜杠 、 \f ——换页
\’ ——单引号 、 \r ——回车
\" —— 双引号 、 \v ——垂直制表
\t ——tab缩进,水平制表 、 \0 ——空字符
\b ——空格,blank 、 \e ——转义
###(2) 字符串长度
字符串是由若干个字符组成的,这些字符的数量就是字符串的长度
通过字符串的length属性可以获取整个字符串的长度
var str = 'my name is andy';
console.log(str.length);
// 输出15 空格也是一个字符
(3) 字符串拼接
多个字符串之间可使用“+”进行拼接,即字符串+任何类型=拼接之后的新字符串
拼接前会把与字符串相加的任何类型转为字符串,再拼接成一个新的字符串
// 字符串“相加”
alert('hello' + '' + 'world'); // 输出hello world
// 数值字符串“相加”
alert('100' + '100'); // 输出100100
// 数值字符串+数值
alert('11' + 12); // 输出 1112
加号总结口诀:数值相加,字符相连
(4) 字符串拼接加强
我们经常会将字符串和变量来拼接,因为变量可以很方便的修改里面的值
变量是不能添加引号的,因为加引号的变量会变成字符串
若两侧都有字符串拼接,口诀:引引加加,删掉数字,变量写加号中间
var age = prompt('请输入您的年领');
var str = '您今年已经'+age+'岁了';
alert(str);
3. Boolean布尔型
布尔型有两个值:true和false,必须是小写字母,其中true真(对)、false假(错)
布尔型和数字型相加时,true的值为1,false的值为0
4. Undefined
undefined 本身是一个数据,表示未定义。
一个声明后没赋值的变量会有一个默认值undefined(进行相连/相加时,注意结果)
undefined和数字相加,最后结果为NaN
var variable;
console.log(variable); // 输出undefined
console.log('你好' + variable); // 输出你好undefined
console.log(12 + variable); // 输出NaN
console.log(true + variable); // 输出NaN
5. Null
null 本身是一个数据。
从逻辑角度,null 值表示一个空对象指针。
如果定义的变量准备在将来用于保存对象,最好将该变量初始化为 null
一个声明变量给null值,里面存的值为空
var vari = null;
console.log('你好' + vari); // 输出你好null
console.log(12 + vari); // 输出12
console.log(true + vari); // 输出1
数据类型转换
把一种数据类型的变量转换成另外一种数据类型
例如:使用表单input、prompt获取的数据默认是字符串型的,此时不能直接加法运算,就需要转换变量的数据类型
1. 转换为字符串类型
-
数据.toString() 方法
-
强制转换:String(数据) 方法,有些值没有toString(),这个时候可以使用String()。比如:undefined和null
-
隐式转换:+ 号拼接字符串方式 (和字符串拼接的结果都是字符串)
var num = 10;
console.log(num + ''); // 输出字符串10
2. 转换为数值类型
parseInt() 方法:字符串转整数方法
- 作用:第一,对浮点数进行取整操作;第二,将字符串转为整数数字。
-
对数字取整功能,直接舍弃小数部分,只保留整数。
- 将字符串转为整数数字,也包含取整功能。
- 字符串中,必须是纯数字字符串或者数字字符开头的字符串,才能转换为正常数字,且只取整数部分, 如果不是数字打头的字符串,会转换为 NaN
console.log(parseInt('3.14')); // 3取整
console.log(parseInt('3.94')); // 3取整(不四舍五入,只取整数)
console.log(parseInt('120px')); // 输出120
console.log(parseInt('rem120px')); // 输出NaN,因为一步步往后,而刚开始r是字母
console.log(Number('12')); // 输出12数值型
parseFloat() 方法:字符串转浮点数方法
- 作用:将字符串转为浮点数数字。
- 要求:满足浮点数数字字符必须在字符串开始,如果不在开始返回值都是NaN
Number() 强制转换方法:字符串转数值型
- 可以用于任何数据类型
- 字符串:纯数字字符串转为对应数字,空字符串和空白字符串转为 0 ,非空非纯数字字符串转为 NaN。
- 布尔值:true 转为 1,false 转为 0。
- undefined:转为 NaN。
- null:转为 0。
JS隐式转换(- * /):利用算术运算符隐式转换为数值型(不包括加号)
console.log('123' + '120'); // 输出123120,所以不包括加号
console.log('123' - '120'); // 输出3
console.log('12' - 0); // 输出12
console.log('123' * 1); // 输出123
案例:计算2个数相加的结果
var num1 = prompt('输入第一个值');
// 也可写成 var num1 = parseFloat(prompt('……'));
var num2 = prompt('输入第二个值');
var result = parseFloat(num1) + parseFloat(num2);
alert('结果是'+ result);
3. 转换为布尔型
Boolean(数据) 方法
转型函数 Boolean() 可以用于任何数据类型,将其他数据类型转为布尔类型的值。
解释型语言和编译型语言
1. 概述
编程语言——翻译器——机器语言(二进制)
- 翻译器翻译的方式有两种:编译(Java~)、解释(JS)
- 编译器在代码执行之前进行编译,生成中间代码文件
- 解释器在运行时进行及时解释,并立即执行(当编译器以解释方式运行时,也称为解释器)
2. 执行过程
Java(login.java) ——Javac.exe编译——中间代码文件login.class ——运行时编译——机器语言
JS(login.html) ——JS引擎解释—— 机器语言——执行
标识符、关键字、保留字命名规范
1. 标识符
标识(zhi)符:指开发人员为变量、属性、函数、参数取的名字
不能是关键字或保留字
变量、函数的命名必须有意义;变量名称一般用名词,函数名称一般用动词(例如:getSum)
2. 关键字
指JS本身已经使用了的字,不能再用它们充当变量名、方法名
包括:break、case、catch、continue、default、delete、do、else、finally、for、function、if、in、instanceof、new、return、switch、this、throw、try、typeof、var、void、while、with等
3. 保留字
实际上就是预留的关键字,意思是现在虽然不是关键字,但是未来可能会成为关键字,同样不能使用它们当变量名或方法名
包括:boolean、byte、char、class、const、debugger、double、enum、export、extends、fimal、float、goto、implements、import、int、interface、long、mative、package、private、protected、public、short、static、super、synchroized、throws、translent、volatile等
parseInt() 的第二个参数
parseInt() 作用:第一,对浮点数进行取整操作;第二,将字符串转为整数数字。
特殊的:方法有第二个参数,值为 2-36 之间的整数,表示的是进制
注意事项1:
如果没有第二个参数:
- 如果出现以 0x/0X 开头的字符串,会自动按照对应的十六进制转为整数。
- 如果出现以 0/0o/0O 开头的字符串,ES3 中会按照八进制进行转换,而ES5 中默 认按照十进制转换。
- 如果出现以其他字符开头的字符串,都按照十进制进行转换。
因此,为了避免解析的不一致问题,要指定第二个参数进制
// 第一步:将 “123” 的字符串,转换成八进制的 123 数字
// 第二步:将 八进制的 123 ,转为十进制
console.log(parseInt("123",8)); // 83
// 没有第二个参数
// 0x 开头,强制使用十六进制进行转换
console.log(parseInt("0x123")); // 291
// 0/0o 开头,ES3 中按照八进制,ES5 按照十进制
console.log(parseInt("0123")); // 123
console.log(parseInt("0o123")); // 0
// 其他字符开头,按十进制
console.log(parseInt("0Xa123", 16)); // 41251
console.log(parseInt("ga123", 16)); // NaN
// 字符串需要按照对应的前缀进行书写,可以正常按照对应的进制进行转换
// 也可以不写前缀,也会按照指定进制进行转换
console.log(parseInt("789",8)); // 7
console.log(parseInt("0789",8)); // 7
console.log(parseInt("98",8)); // NaN
console.log(parseInt(Infinity,10)); // NaN
console.log(parseInt("123.45",8)); // 八进制的 123,转为十进制 83 输出
console.log(parseInt("123.45",2)); // 二进制的 1,转为十进制的1 输出
console.log(parseInt(56,3)); // NaN
console.log(parseInt(0x1f, 16)); // 49,只要是数字,参与程序之前都要转成十进制:0x1f →转成十六进制→ 31 →转成十进制→ 49
console.log(parseInt(31, 16)); // 49,第一步转成了十六进制的31,输出前要再次转成10进制
注意事项2:
由于某些数字在其字符串表示形式中使用 e 字符(例如 6.022e23 或者6.022e-23),因此当对非常大或非常小的数字使用数字时,使用 parseInt 截断数字将产生意外结果。 parseInt不应替代Math.floor()
console.log(parseInt(6.7, 10)); // 返回6
console.log(parseInt(640000000000000000000000000000000000000000000,10)); // 非常大的数值参与程序时,会转变成e计数法形式, 即最后会对6.4e+44这个字符串进行取取整,十进制取整时只会保留小数点前面的数字,所以返回6
console.log(parseInt(0.000000000006022,10)); //非常小的数值参与程序时,也会转变成e计数法形式,