JS语法
- JS中严格区分大小写
JS中每条语句以分号 ; 结尾。 如果不加分号,浏览器会自动添加,但会消耗系统资源。
有时候浏览器会加错分号。
- JS忽略多个空格和换行---- 对代码进行美化和格式化。例如: xxx.min.js
标识符
JS中所有可以自己命名的都可以称为标识符
- 如变量名,函数名,属性名都是标识符
命名一个标识符遵循以下规则:
- 可以含有字母,数字,_ ,$。
- 标识符不能以数字开头
- 标识符不能是ES中的关键字或者保留字
- 标识符一般采用驼峰命名。
首字母小写,每个单词开头字母大写。其余字母小写
- JS 底层保存标识符时实际上采用的 Unicode 编码。
理论上,所有的UTF-8中含有的内容都可以作为标识符
数据类型
数据类型就是字面量的类型。在JS中有6中数据类型
- String 字符串
- Number 数值
- Boolean 布尔
- Null 空
- Undefined 未定义
- Object 对象 → 引用数据类型
String 字符串
- 字符串使用需要双引号或单引号
- 相同引号不能嵌套。单引号可以嵌套于双,双引号可嵌套于单引号
转义字符: \ 如: \"
- \"表示 "
- \'表示'
- \n表示换行
- \t表示制表符
Number 数值
- 在JS中所有的数值都是Number类型。【包括整数和浮点数】
JS中阔以表示的数字最大值:
Number.MAX_VALUE
:1.7976931348623157e+308Number.MIN_VALUE
【大于零的最小值】:5e-324
- 如果使用Number表示的数字超过了最大值。则返回一个
±Infinity
:[±无穷]!穷哥? 使用
typeof
检查Infinity
也会返回number。typeof
检查字符串返回 string;检查数值返回 number。- NaN是一个特殊的数字,表示 Not A Number。
typeof NaN
也返回number - JS中整数的运算基本阔以保证精确
- 使用JS进行浮点数运算阔能得到不精确结果。精确度较高的运算不要使用
JS
Boolean 布尔值
- true 真
false 假
typeof
为 boolean
Null 空值,Undefined 未定义
- Null值只有
null
,使用typeof
返回object - Undefined 未定义值只有
undefined
。声明一个变量但不赋值或赋值undefined
时:typeof
返回undefined
- Null值只有
强制类型转换
将一个数据类型强制转换为另一个数据类型。
将其他数据类型转换为:String,Number,Boolean
1.转换为String【转换后数据类型都是String】
- 使用toString()方法。
- 调用被转换数据类型的
toString()
方法。toString
方法有返回值 - 该方法不会影响原变量,它会将转化的结果返回。
null
和undefined
没有 toString()方法。如果调用会报错使用String函数
- 调用String()函数,并将转换的数据作为参数返回;
使用String()函数做强制类型转换时。
- 对于Number和Boolean实际上就是调用toString()方法。
- 对于null和undefined,不会调用toString()方法。会将
null/undefined
直接转换为"null/undefined"
2.转换为Number类型【转换后数据类型都是Number】
使用Number()函数转换
字符串转换为
Number
。- 纯数字字符串,直接转换为数字
- 字符串中含有非数字内容,则转换为NAN。
- 如果是一个空串或者全是空格的字符,则转换为
零
.
- 布尔类型转换为
数字
1,0 - null转换为
数字
0 - undefined转换为
数字
NAN - 对两个值进行减,乘,除法.这两个值都会变成都会转换成
number
针对字符串转换为Number
parseInt(a,b)
函数把一个字符串转换为一个整数。parseFloat(a,b)
把一个字符串转换为一个浮点数对于非
String
使用 parseInt()和parseFloat()会先转换成String
,在转化为Number
3.转换为Boolean类型
使用Boolean()函数
数字 ---> 布尔
- 除了
0和NaN
,其余都是true
- 除了
字符串 ---> 布尔
- 除了
空串
,其余都是true
- 除了
null
和undefined
都会转换为false
隐式转换
- 对值进行两次取反,
!!a
,与Boolean()原理一样
- 对值进行两次取反,
4.转换为其他类型
- 十六进制
0X88
- 八进制
077
- 二进制
0b11
"077"
这种字符串,为了使浏览器表示正确,方法中使用参数。parseInt(a,10)解析
成十进制
.
运算符
通过运算符可以对一个或多个值进行运算,并获得运算结果
比如:
typeof
是运算符,可以用来获得一个值的类型。它会将该值的类型以字符串的形式返回
number ,string , boolean ,undefined ,object
1. 算数运算符
当对非Number类型【除了字符串 加法 】
的值进行运算时,会将这些值转换为Number
然后进行计算;任何值与NaN
运算都是NaN
( + )加法
特殊:任何值与字符串相加都转化为字符串,后进行
拼串
操作。利用这一特点,进行任意数据类型
隐性的
String类型转换 【实际上也是调用String()函数
】:
reg = reg + "";
===>typeof reg ---> string
result = 1 + 2 + "3"; // 33
result = "1" + 2 + 3; //123
( - * / )减,乘,除法
对两个值进行减,乘,除法.这两个值都会变成都会转换成
number
,利用这一特点进行隐式Number
转换-0
,*1
,/1
三种方式。原理和Number()
一样- ( % )取模运算【取余数】
2. 一元运算符
只需要一个操作数
+
:不会对数字产生影响
-
: 对数字符号进行取反
对于非Number类型
:它会先转换为Number,然后运算。对一个其他数据类型使用+
,将其转换为number
var result = 1 + "2" + 3; //123
var result = 1 + +"2" +3; //6
var a = + "5";
console.log(typeof a);//number
3. 自增,自减
自增:
- 使变量在自身的基础上增加1.
- 一个变量自增后,原变量的值会
立即
自增1.
后++
(a++),前++
(++a)
这两种自增,都会使原变量的值立即自增1
- 不同的是
a++
和++a的
值不同a++
的值等于原变量
的值。(自增前)++a
的值等于新值
。(自增后)
var a = 10 ;
a = ++a + ++ a +a ;//11 +12+12=35
a = ++a + a++ + a ;//11 +11+12 =34
自减:
- 使变量在
原值
基础上减一
前--
(--a) ,后--
(a--)
这两种自减,都会使原变量的值
立即
自减1
- 不同的是
--a
和a--
的值不同
var a = 10;
a = --a - a-- +a;//9-9+8 = 8
a = a++ - --a + ++a-a; //10-10+11-11 = 0
4. 逻辑运算符
!非
:进行非运算,两次取反它的布尔值不会
变化,可以利用这一特点进行布尔类型转换
&& 与
:两个值中有一个false
,就返回false
; 第一个值为
false
,不检查&&
后面的值。第一个值为true
会检查&&
后面的值
|| 或
:两个值都为false
,返回false
; 第一个值为
true
,不检查||
后面的值。第一个为false
会检查||
后面的值
非布尔值的与
,或
。【先将其转换为布尔值,然后再运算,并返回原值
】
与
:- 第一个值为true
,必然返回第二个原值
第一个值为
false
,直接返回第一个值[返回第一个为false的值]{没false,默认第二个为false?/!滑滑滑}
//两个值都为true,返回后面true的原值
var a = 22&&10; // a =10;
//其中有false,返回靠前false的原值
var a = 0&&88; //a =0;
//NaN和null,undefined满足上面规则
var a = NaN && null; // a = NaN
console.log('a = '+a);
或
:- 第一个值为true
,直接返回第一个值
- 第一个值为
false
,直接返回第二个值
var a = 0||56; // a = 56
var a = 77||88; //a = 77
5. 赋值运算符
=
+=
: a += 3; ---> a = a+3;
-=
: a -= 3; ---> a = a-3;
*=
: a *= 3; ---> a = a乘3;
/=
: a /= 3; ---> a = a/3;
%=
: a %= 3; ---> a = a%3;
6. 关系运算符
通过关系运算符,比较两个值的大小关系,如果成立返回true
,否则返回false
大于号
>
; 大于等于>=
;小于<
; 小于等于<=
判断
符号
左边的值是否**右边的值。成立返回true
.非数字进行比较时,会先转换成数字,再进行比较。
1 > "0";//true
任何值和
NaN
做运算都是false
如果符号两侧都是字符串时,则不会将其转换为数字,而会分别比较字符串中的
Unicode编码
.- 比较字符串编码时,是一位一位进行比较
- 如果比较的两位相等,则各自比较延后的一位。可以用来英文排序,比较中文没有意义
console.log("11"<"5");//true 1的编码小于5的编码 console.log("bbc"<"b");//false bc的编码大于`空`的编码
比较字符串型的数字时,进行类型转换。
console.log( "24234" < +"5"); // false
7. Unicode 编码
- 在字符串中使用
转义字符
输入Unicode编码 “\U四位编码
,这里的编码是16进制
”- 网页中使用Unicode编码 “
&#编码;
,这里的编码是十进制
”
8. 相等字符串
双等号
: 判断两个值是否相等。相等返回true
,不等返回false
. 如果两个值类型不同,会自动进行转换成
相同的数据类型
,然后比较。【转换的数据类型情况不同
】
!=
:不相等
,也会对变量进行类型转换。
===
:全等
,用来判断两个值是否全等。和相等类似,但不同的是,它不会
做自动的类型转换。 如果两个值的
类型不同
,直接返回false
!==
:不全等
。不会自动类型转换。 如果两个值的
类型不同
,直接返回true
== :
console.log(true == "1");//true 字符串转换成数字1,true转换成1
console.log("1"==1); //true 字符串转换为 数字1
console.log(null ==0 ); //false. 不知道转换成什么了,应该是都转换成object了
console.log(null == undefined); //true .
console.log(NaN == NaN); // false NaN不与任何值相等
//通过 isNaN()函数是否是 NaN。是,返回 true;否,返回false
!= :
console.log(10 != 5); //true
console.log(10 != 10); //false
console.log('abcd' != 'abcd'); //false
//会进行自动类型转换
console.log('1' != 1); //false
"===;!== ;"
console.log(10 === '10'); //false
console.log(10 !== '5'); //true
9. 条件运算符
条件表达式?语句1:语句2;
---->执行时,首先对条件表达式进行
求值
。
- 如果该值为
true
,则执行语句1,并返回执行结果。- 如果该值为
false
,则执行语句2,并返回执行结果。如果表达式值为
非布尔值
,会转换为布尔值
,在执行后续操作
var max = a>b? a:b; //获取ab中的最大值
10. 运算符的优先级
运算符优先级表格。
优先级可以使用
括号
,改变优先级