注释
// 单行注释 快捷键:ctrl+/
/**
* 多行注释
* 快捷键:shift+alt+A
*/
标识符
标识符是指变量、数组、函数等名字。定义标识符就是取名字的过程。
标识符的命名规则:
硬性要求:
- 数字、字母、下划线、$
- 不能以纯数字或数字开头
- 严格区分大小写
软性要求:见名知意,不能使用关键字、保留字等
标识符的命名方式:
蛇形命名法,用下划线连接:例如——login_id
驼峰命名法:1.小驼峰:例如——loginId;2.大驼峰:LoginId
变量
变量是一个存储数据的容器,里面的数据是可以随时变化的
var(ES5)
1、没有块级作用域
2、可以遗漏声明
3、可以变量提升。
声明之前可以用,但打印出来是undefined
let(ES6)
声明普通变量,变量声明不赋值就是 undefined;
let不能重复声明变量,但可以重新赋值,不能在声明之前去使用。
let 有块级作用域:{let a = 10},此时 a 只能在花括号里面才能使用
变量一次可以声明多个,中间用逗号隔开,类似于css中的并集选择器。
常量
const(ES6)
特性:
- 对于简单值,不能再更改;
- 对于复杂值,在不改变引用的前提下可以修改;
- const 声明的变量必须赋值。
数据类型
JS 中的每一个值都必须属于某种数据类型,使用 typeof ----- 查看数据类型。
基本数据类型
基本数据类型也叫: 原始数据类型 || 简单值
基本数据类型 | 说明 | 默认值 |
---|---|---|
undefined | 未定义 | undefined |
null | 空 | null |
number | 数字 | 0 |
boolean | 布尔 | false |
string | 字符串 | " " |
symbol(ES6) | 符号 |
数字型 number
1、整数
let a = 10;
2、浮点数
let b = 1.2;
let c = 1.3;
let d = b + c;
3、最大值最小值
console.log(Number.MAX_VALUE);
console.log(Number.MAX_VALUE);
4、无穷大
console.log(Number.MAX_VALUE*2);// 会得到 Infinity 无穷大
5、非数 NaN = not a number
特点:
- 非数不与任何值相等,包括它自己;
- 他的数据类型是 number;
- 涉及到 NaN 的计算只会得到 NaN。
字符串型 String
单引号'' (推荐使用)
双引号""
``ES6 新增字符串模板 特点:1、支持多行文本;2、进行变量解析
1、注意引号嵌套问题,可以使用不同的引号来进行区分
let str = '他说:“好好学习天天向上!”';
console.log(str);
2、转义符 \ 写在符号前面
let str2 = '他说:\'好好学习天天向上!\'';
console.log(str2);
3、换行符 \n = newline
let str3 = '好好学习,\n天天向上';
console.log(str3);
4、查看字符串长度 length
let str4 = '好好学习 天天向上'; // 长度为9,一个空格字符也算一个长度
console.log(str4.length);
5、字符串拼接 +, 字符串和任意值拼接都会被转化成字符串
console.log('好好学习'+'天天向上');
console.log('学习'+666);
6、ES6 新增的字符串模板 ``:可以在里面输入文字,输入变量需要用${}包裹起来
特点:
1、支持多行文本;
2、进行变量解析;
let str5 = `0糖
0卡
0脂肪`;
console.log(str5);
let age = 18;
console.log(`我今年${age-2}岁`);// 打印 我今年16岁,可以直接在{}里面进行运算
布尔型 boolean
布尔型 true(真) 和 false(假),任何数据类型都可以转化为 boolean 类型。
会返回 boolean 中 false 的情况:
-
空字符串,包含''、""、字符串模板``
-
0
-
NaN
-
false
-
null
-
undefined
未定义的 undefined
未定义: undefined 当声明时未赋值,就会出现 undefined。
会返回 undefined 的情况:
-
访问未赋值的变量 ----- 例:let a;
-
任何被设置为 undefined 值的变量 ----- 例:let a = undefined;
-
没有定义 return 表达式的函数,隐式返回 undefined ----- 例:function foo(){}
-
return 表达式没有显示的返回任何内容 ----- 例:function foo(){ return;}
-
访问不存在的属性 ----- 例:zhangsan.girlfriend
空值 null
let space = null;
console.log(null == undefined);// true
console.log(typeof space);// 查看null的数据类型时得到的是 object
let a1 = '10',a2 = 10;
console.log(a1==a2);//返回true ,不精确比较:只比较值,不比较数据类型
console.log(a1===a2);//返回false, 精确比较:值和数据类型都一样才返回true
console.log(null+'aaa');// 返回nullaaa
console.log(null+1);// 返回1
undefined与null的区别:
undefined 表示缺少值;
null 通常用于释放内存,计算时被看做0。
引用数据类型
引用数据类型也叫 合成数据类型 || 复杂值
- 对象 object
数据类型的转换
类型转换分为:隐式转换和显示转换。
1、隐式转换:
就是系统内部自动发生的转换,一般发生于不同的数据类型进行运算时:
-
不同数据类型进行比较
-
不同数据类型进行运算
-
对非布尔值求布尔值
2、强制转换:
如果不想让一个数字发生变化,可以让它参加运算,-0,*1等等,也可以在前面加~~,可以转成数字。
强制转换分为三大类:示例代码如下:
// 一:转换成字符串
// 1、转换成字符串型 变量.toString()
let num = 10;
let str6 = num.toString();
console.log(typeof str6);
// 2、强制转换 String()
console.log(String(num));
// 3、利用 + 做字符串拼接转换,和字符串拼接的结果都是字符串
console.log(111+'');// 转换成功,打印为111字符串
// 二:转换成数字型
// 1、parseInt() 转换成整数 遇到了第一个非数字时就返回NaN,遇到了一个其他字符就返回前面的整数
let age1 = '18';
console.log(parseInt(age1)); // 打印18
console.log(parseInt(3.14));// 打印3
console.log(parseInt('314abc'))// 打印314
console.log(parseInt('abc314')); // 打印 NaN
//2、parseFloat() 转换成浮点数 遇到了第一个非数字时就返回NaN,遇到了一个其他字符就返回前面的小数
console.log(parseFloat('3.14'));// 打印3.14
console.log(parseFloat('3.a4'));// 打印3
console.log(parseFloat('3.14abc'));// 打印3.14
console.log(parseFloat('abc3.14'));// 打印NaN
console.log(parseFloat('3.14.256a'));// 打印3.14
console.log(parseFloat('3.1a4.256'));// 打印3.1
//3、Number() 这个方法做整体转换,只要有其他字符则返回 NaN
let str7 = '123';
console.log(Number(str7));
console.log(Number(123.4));// 打印123.4
console.log(Number('123.4'));// 打印123.4
console.log(Number('123.4a'));// 打印NaN
console.log(Number('abc123.4a'));// 打印NaN
//4、利用算数运算转换 - * / 注意:没有+运算,因为+是字符串拼接
console.log('2' * 5);// 打印10
console.log('2' * '5');// 打印10
console.log('10' / 5);// 打印2
console.log('2' - 5);// 打印-3
// 三:转换成布尔型
console.log(Boolean(0));// 打印false
console.log(Boolean(' '));// 打印true
console.log(Boolean('0'));// 打印true
console.log(Boolean(null));// 打印false
console.log(!!null);// 打印false
console.log(Boolean(undefined));// 打印false
console.log(Boolean(NaN));// 打印false
.toFixed() 方法
把保留几位小数写在括号里:
特点1:结果数出来是字符串类型,
特点2:可以保留后面的位数。
运算符
1、按操作个数分类
-
一元运算符 ----- 例:typeof
-
二元运算符 ----- 例:* /
-
三元运算符 ----- 例:三目运算
2、按用法分类
算术运算符
运算符 | 描述 | 示例 |
---|---|---|
+ | 加法运算符 | x + y 表示计算 x 加 y 的和 |
- | 减法运算符 | x - y 表示计算 x 减 y 的差 |
* | 乘法运算符 | x * y 表示计算 x 乘 y 的积 |
/ | 除法运算符 | x / y 表示计算 x 除以 y 的商 |
% | 取模(求余)运算符 | x % y 表示计算 x 除以 y 的余数 |
** | 幂符号 | x ** 3 = x 的 3 次方,x ** 4等于 x 的 4 次方 |
自增、自减运算符
在前和在后的区别:
++ 在前,先自增再参与运算,++ 在后,先参与运算再自增
-- 在前,先自减再参与运算,-- 在后,先参与运算再自减
运算符 | 名称 | |
---|---|---|
++i | 自增运算符 | 将 i 加 1,然后返回 i 的值 |
i++ | 自增运算符 | 返回 i 的值,然后再将 i 加 1 |
--i | 自减运算符 | 将 i 减 1,然后返回 i 的值 |
i-- | 自减运算符 | 返回 i 的值,然后将 i 减 1 |
赋值运算符
运算符 | 描述 | 示例 |
---|---|---|
= | 将运算符右侧的值赋值给运算符左侧的变量 | x = 10 表示将变量 x 赋值为 10 |
+= | 先进行加法运算,再将结果赋值给运算符左侧的变量 | x += y 等同于 x = x + y |
-= | 先进行减法运算,再将结果赋值给运算符左侧的变量 | x -= y 等同于 x = x - y |
*= | 先进行乘法运算,再将结果赋值给运算符左侧的变量 | x *= y 等同于 x = x * y |
/= | 先进行除法运算,再将结果赋值给运算符左侧的变量 | x /= y 等同于 x = x / y |
%= | 先进行取模运算,再将结果赋值给运算符左侧的变量 | x %= y 等同于 x = x % y |
字符串运算符
JS 中的 + 和 += 运算符除了可以进行属性运算外,还可以用来拼接字符串:
-
+
运算符表示将运算符左右两侧的字符串拼接到一起; -
+=
运算符表示先将字符串进行拼接,然后再将结果赋值给运算符左侧的变量。
关系(比较)运算符
注意:
1、字符与字符比较时,按照 ASCll码比较
2、有数字在时,比较的时候优先转为数字
3、由于字符串不能转换为数字,会返回NaN,所以比较出来结果永远都是false
运算符 | 名称 | 示例 |
---|---|---|
> | 大于 | x > y 表示如果 x 大于 y,则为真 |
< | 小于 | x < y 表示如果 x 小于 y,则为真 |
>= | 大于等于 | x >= y 表示如果 x 大于或等于 y,则为真 |
<= | 小于等于 | x <= y 表示如果 x 小于或等于 y,则为真 |
== | 等于 | x == y 表示如果 x 等于 y,则为真 |
=== | 全等于(精确比较) | x === y 表示如果 x 等于 y,并且 x 和 y 的类型也相同,则为真 |
!= | 不等于 | x != y 表示如果 x 不等于 y,则为真 |
!== | 不全等 | x !== y 表示如果 x 不等于 y,或者 x 和 y 的类型不同,则为真 |
逻辑运算符
运算符 | 名称 | 示例 |
---|---|---|
&& | 逻辑与(并且) | x && y 表示如果 x 和 y 都为真,则为真 |
|| | 逻辑或(或者) | x || y 表示如果 x 或 y 有一个为真,则为真 |
! | 逻辑非(非) | !x 表示如果 x 不为真,则为真 |
&& 短路 :遇假返回第一个假值,如果没有假值,则返回最后一个真值 :
代码示例:
console.log(4 && '4');// 打印'4':为真,返回的第二个
console.log(4 && '');// 打印'':
console.log(0 && true);// 打印0:为假,短路,返回第一个
console.log(0 && NaN && 1);// 打印0:为假,短路,返回第一个
console.log(false && NaN && null);// 打印false:第一个为假,则返回假
console.log('abc' && true && 1);// 打印1:都为真,则返回最后一个值
|| 短路:遇真返回第一个真值,如果没有真值,则返回最后一个假值 :
代码示例:
console.log(4 || '4');// 打印4,遇真则返回真值
console.log(4 || 'abc');// 打印4,其中有一个为真,则返回真的值
console.log('' || 'abc');// 打印'abc',
console.log(undefined || '');// 打印''
console.log(undefined || null || '');// 打印''
console.log(1 || null || '');// 打印1
console.log(4 > 5 || 2 < 3);// 打印true
! 非(取反):返回boolean值:非真即假,非假即真:
代码示例:
console.log(!(200 > 201));// 打印true
console.log(!1);// 打印false
console.log(!!1);// 打印true
console.log(!!null);// 打印false
console.log(Boolean(null));// 打印false
三目运算符
语法格式:
条件表达式1 ? 表达式2 : 表达式3;
// 执行思路:如果表达式1的结果为真,则执行表达式2,如果表达式1的结果为假,则执行表达式3