JavaScript基础(一)
一、JavaScript的数据类型
1、JavaScript是一种弱类型语言,不用提前声明变量的数据类型。在程序运行过程中,变量的数据类型会被自动确定
2、数据类型分类:基本数据类型和复杂数据类型(也称为引用数据类型)。
(1)、数字型:JavaScript中的数字型可以用来保存整数或浮点数(小数)
var age = 18; // 整数
var pi = 3.14; // 浮点数(小数)
①常见的进制
八进制数:在数字开头加上0,八进制数由0~7组成,逢8进位
十进制数:是组成以10为基础的数字系统,有0~9组成,逢10进位
十六进制数:在数字开头加上0x,十六进制数由0-9,a-f组成
在进行进制转换时,可将其先转为二进制,再进行转换
②范围:数字型的最大值和最小值
最大值:Number.MAX_VALUE,输出结果:1.7976931348623157e+308
最小值:Number.MIN_VALUE,输出结果:5e-324
③数字型的3个特殊值:Infinity和- Infinity 和NaN
Infinity(无穷大) :如Number.MAX_VALUE*2
Infinity(无穷小) :如-Number.MAX_VALUE*2
NaN(非数值): 如'abc' – 100
isNaN:用来判断一个变量是否为非数字的类型,返回值为true表示非数字,
false表示是数字(使用较为频繁)
(2)、字符串型
字符串是指计算机中用于表示文本的一系列字符,在JavaScript中使用单引号或双引号来包裹字符串。
var str1 = '单引号字符串';
var str2 = "双引号字符串";
①单、双引号嵌套
在单引号字符串中可以直接书写双引号
在双引号字符串中也可以直接书写单引号
正确示例
var str1 = 'I am a "programmer"'; // I am a "programmer"
var str2 = "I'm a 'programmer'"; // I'm a 'programmer'
错误示例
var str1 = 'I'm a programmer'; // 单引号错误用法
var str2 = "I'm a "programmer""; // 双引号错误用法
var str3 = 'I am a programmer"; // 单双引号混用
②转义符:在字符串中使用换行、Tab等特殊符号时,可以用转义符来进行转义,转义符以“\”开始。常见转义符见下表。
③字符串长度:字符串是由若干字符组成的,这些字符的数量就是字符串的长度。通过字符串的length属性可以获取整个字符串的长度。
④访问字符串中的字符:字符串可以使用“[index]”语法按照index(索引)访问字符,index从0开始,一直到字符串的长度减1,如果超过了index最大值,会返回undefined。
示例代码
var str = 'I\'m a programmer';
console.log(str[0]); // 输出结果:I
console.log(str[1]); // 输出结果:'
console.log(str[15]); // 输出结果:r
console.log(str[16]); // 输出结果:undefined
⑤字符串拼接:多个字符串之间可以使用“+”进行拼接,如果数据类型不同,拼接前会把其他类型转成字符串,再拼接成一个新的字符串。
示例代码
var str = 'I\'m a programmer';
console.log('a' + 'b'); // ab
console.log('a' + 18); // a18
console.log('_' + true); // _true
console.log('12' + 14); // 1214
console.log(12 + 14); // 两个数字相加,结果为26
⑥显示年龄的案例:弹出一个输入框,让用户输入年龄。输入后,单击“确定”按钮,程序弹出来一个警告框,显示内容为“您今年x岁了”,x表示刚才输入的年龄。
var age = prompt('请输入您的年龄'); // 弹出一个输入框,让用户输入年龄
var msg = '您今年' + age + '岁了'; // 将年龄与输出的字符串拼接
alert(msg); // 弹出警告框,输出程序的处理结果
(3)、布尔型
布尔型通常用于逻辑判断,它有两个值:true和false,表示事物的“真”和“假”
console.log(true); // 输出结果:true
console.log(false); // 输出结果:false
console.log(true + 1); // 输出结果:2
console.log(false + 1); // 输出结果:1
(4)、undefined和null
// 演示null的使用
var b = null;
console.log(b + '_'); // 输出结果:null_(字符串型)
console.log(b + 1); // 输出结果:1(b转换为0)
console.log(b + true); // 输出结果:1(b转换为0,true转换为1)
(5)、数据类型检测:可以利用typeof运算符进行数据类型检测
console.log(typeof 12); // 输出结果:number
console.log(typeof null); // 输出结果:object
var a = '12';
console.log(typeof a == 'string'); // 输出结果:true
字面量,简单来说,就是用字面量来表示如何在代码中表达这个值,通过字面量,我们可以很容易地看出来它是哪种类型的值。例如数字字面量:7、8;布尔字面量:true、false等。
二、数据类型转换
(1)、转换为字符串型
-
利用“+”拼接字符串(最常用的一种方式)
-
利用toString()转换成字符串
-
利用String()转换成字符串
注意:null和undefined无法使用toSting()方式进行转换;对于数字型的变量,可以在toString()的小括号中传入参数,来进行进制转换。
(2)、转换为数字型
-
使用parseInt()将字符串转为整数
-
使用parseFloat()将字符串转为浮点数
-
使用Number()将字符串转为数字型
-
利用算术运算符(-、*、/)隐式转换
示例
var year = prompt('请输入您的年龄');
var age = 2020 - parseInt(year);
alert('您今年已经' + age + '岁了');
var num1 = prompt('请输入第一个数:');
var num2 = prompt('请输入第二个数:');
var result = parseFloat(num1) + parseFloat(num2);
alert('计算结果是:' + result);
(3)、转换为布尔型:使用Boolean(),代表空、否定的值会被转换为false,如空字符串、0、NaN、null和undefined,其余的值转换为true
示例
console.log(Boolean('')); // false
console.log(Boolean(0)); // false
console.log(Boolean(NaN)); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean('小白')); // true
console.log(Boolean(12)); // true
三、运算符
1、算术运算符:用于对两个变量或值进行算术运算,与数学上的加、减、乘、除类似,常用的算术运算符如下
算术运算符的注意事项:
-
进行四则混合运算时,运算顺序要遵循数学中“先乘除后加减”的原则
-
在进行取模运算时,运算结果的正负取决于被模数(%左边的数)的符号,与模数(%右边的数)的符号无关
-
在开发中尽量避免利用浮点数进行运算,因为有可能会因JavaScript的精度导致结果的偏差
-
使用“+”和“-”可以表示正数或负数
注:表达式是各种类型的数据、变量和运算符的集合,最简单的表达式可以是一个变量或字面量。表达式最终都会有一个返回值。
2、递增递减运算符:使用递增(++)、递减(–)运算符可以快速地对变量的值进行递增和递减操作,它属于一元运算符,只对一个表达式进行操作
- 前置递增(递减)运算符:递增和递减运算符写在变量前面,返回的是计算后的结果
- 后置递增(递减)运算符:递增和递减运算符写在变量后面,返回的是计算前的结果
- 递增和递减运算符的优先级高于“+”“-”等运算符
3、比较运算符:用于对两个数据进行比较,其结果是一个布尔值,即true或false ,常用的比较运算符及用法见下表
4、逻辑运算符:用于对布尔值进行运算,其返回值也是布尔值。在实际开发中,逻辑运算符经常用于多个条件的判断,常用的逻辑运算符见下表
注:位运算符,用来对数据进行二进制运算,将参与运算的操作数视为由二进制(0和1)组成的32位的串
5、赋值运算符:用于将运算符右边的值赋给左边的变量,常用的逻辑运算符及示例如下
console.log(Boolean('')) // false
var age = 10;
age += 5; // 相当于age = age + 5;
console.log(age); // 输出结果:15
age -= 5; // 相当于age = age - 5;
console.log(age); // 输出结果:10
age *= 10; // 相当于age = age * 10;
console.log(age); // 输出结果:100
常用的逻辑运算符如下
6、三元运算符:是一种需要三个操作数的运算符,运算的结果根据给定条件决定
条件表达式 ? 表达式1 : 表达式2
语法说明:先求条件表达式的值,如果为true,则返回表达式1的执行结果;如果条件表达式的值为false,则返回表达式2的执行结果
7、运算符的优先级:是指表达式中所有运算符参与运算的先后顺序
注:1、逻辑运算符中的短路问题
(1)&&的短路:当第一个表达式为false时,不运算第二个表达式
(2)||的短路:当第一个表达式为true时,不运算第二个表达式
2、++和–的应用:前缀表达式和后缀表达式的区别
(1)前缀和后缀作为独立语句出现时没有区别
(2)前缀和后缀在表达式中的区别:
A、后缀:先使用变量的值,然后让变量加1
B、前缀:先让变量加1,然后再使用变量
3、JavaScript中=和和=以及!=、!==的区别与联系
在JavaScript中,“=”代表赋值操作;“==”先转换类型再比较,“===”先判断类型,如果不是同一类型直接为false。其中“==”和“===”都可以用在布尔表达式中,但两者有很大的区别,下面对三者进行具体介绍:
一、“=”代表赋值,即将右边的值赋值到左边。
例子:表达式① x=“55”,表示将字符串类型的55赋值给变量x,即变量x也为字符串类型。
表达式② x=55,表示将数值类型的55赋值给变量x,即:变量x也为数值类型
二、 “==”表示先转换类型(自动)再比较。如果两个值相等,肯定相等,如果两个值不等,也可能是相等的,按一下情况进行判断:
1、如果一个是null、一个是undefined,那么相等。
2、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。
3、如果任一值是 true,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。
4、如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。
注意:对象转换成基础类型,利用它的toString或者valueOf方法。js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象。
例子:表达式"1" == true;返回结果为true。
解析:true转成1,再把“1”转成1,进行比较。(“==”会在两个值数据类型不同时,自动转化为同类型进行值比较)
三、 “===”先判断数据类型,(类型不同时,不会自动转换类型)如果不是同一类型直接为false。如果类型相同,再判断其值,如果值也相同则返回true,否则返回false。===表示的是绝对的相等。
1、如果被比较的两个值数据类型不相等则不等。
2、如果被比较的两个值都是数值,并且是同一个值,判定相等。
3、如果被比较的两个值都是字符串,每个位置的字符都一样,那么相等;否则不相等。
4、如果被比较的两个值都是布尔类型的true,或者都是false,那么相等。
5、如果被比较的两个值都引用同一个对象或函数,那么相等;否则不相等。
6、如果两个值都是null,或者都是undefined,那么相等。
例子:假设给定 x=5;
表达式① x===5 返回结果为 true;
表达式② x==="5" 返回结果为 false。
解析:针对给定表达式x=5知,将数值5赋值给变量x,即:变量x为数值类型变量。因此,对于表达式①,等号两端数据类型均为数值类型,类型相同,再比较数值,均为5,因此值与类型均相同,所以返回结果为true。而对于表达式②来说,等号坐标变量x数据类型为数值型,等号右端变量数据类型为字符串类型,二者数据类型不相同,由于“===”表达式不能实现自动转换数据类型,因此返回数据结果为false。
四、!=是“==”的逆反,在不等式两端数据类型不同时,自动转化成相同的数据类型,在进行值比较,如果值相同则返回结果为false,否则为true。
例子:表达式"1" != true;返回结果为false。
解析:对于表达式“!=”,两百年数据类型不相同,会自动将布尔型true转成数值型1,再把字符型“1”转成数值型1,在进行比较,值相同,因此表达式不成立,即返回结果为false。
五、!==是“===”的逆反,当不等式两端的数据类型不相同时,不会自动将两端的数据类型转换成同一数据类型,而是返回结果直接为true,如果数据类型相同,继续比较其值,如果值也相同,则返回false,否则返回true。
例子:假设给定 x=5;
表达式① x!==5 返回结果为false;
表达式② x!=="5" 返回结果为 true;
解析:针对给定表达式x=5知,将数值5赋值给变量x,即:变量x为数值类型变量。因此,对于表达式①,等号两端数据类型均为数值类型,类型相同,再比较数值,均为5,因此值与类型均相同,所以返回结果为false。而对于表达式②来说,等号坐标变量x数据类型为数值型,等号右端变量数据类型为字符串类型,二者数据类型不相同,由于“!==”表达式不能实现自动转换数据类型,因此返回数据结果为true。