JS语法

  1. JS中严格区分大小写
  2. JS中每条语句以分号 ; 结尾。 如果不加分号,浏览器会自动添加,但会消耗系统资源。

    有时候浏览器会加错分号。
  3. JS忽略多个空格和换行---- 对代码进行美化和格式化。例如: xxx.min.js

标识符

  1. JS中所有可以自己命名的都可以称为标识符

    1. 如变量名,函数名,属性名都是标识符
  2. 命名一个标识符遵循以下规则:

    • 可以含有字母,数字,_ ,$。
    • 标识符不能以数字开头
    • 标识符不能是ES中的关键字或者保留字
    • 标识符一般采用驼峰命名。首字母小写,每个单词开头字母大写。其余字母小写
  3. JS 底层保存标识符时实际上采用的 Unicode 编码。理论上,所有的UTF-8中含有的内容都可以作为标识符

数据类型

数据类型就是字面量的类型。在JS中有6中数据类型

  • String 字符串
  • Number 数值
  • Boolean 布尔
  • Null 空
  • Undefined 未定义
  • Object 对象 → 引用数据类型
  1. String 字符串

    • 字符串使用需要双引号或单引号
    • 相同引号不能嵌套。单引号可以嵌套于双,双引号可嵌套于单引号
    • 转义字符: \ 如: \"

      • \"表示 "
      • \'表示'
      • \n表示换行
      • \t表示制表符
  2. Number 数值

    • 在JS中所有的数值都是Number类型。【包括整数和浮点数】
    • JS中阔以表示的数字最大值:

      • Number.MAX_VALUE:1.7976931348623157e+308
      • Number.MIN_VALUE大于零的最小值】:5e-324
    • 如果使用Number表示的数字超过了最大值。则返回一个 ±Infinity :[±无穷]!穷哥?
    • 使用typeof检查Infinity也会返回number。

      typeof 检查字符串返回 string;检查数值返回 number。
    • NaN是一个特殊的数字,表示 Not A Number。typeof NaN也返回number
    • JS中整数的运算基本阔以保证精确
    • 使用JS进行浮点数运算阔能得到不精确结果。精确度较高的运算不要使用JS
  3. Boolean 布尔值

    • true 真
    • false 假

      typeof 为 boolean

  4. Null 空值,Undefined 未定义

    • Null值只有null,使用 typeof返回object
    • Undefined 未定义值只有 undefined。声明一个变量但不赋值或赋值undefined时:typeof返回 undefined

强制类型转换

将一个数据类型强制转换为另一个数据类型。

将其他数据类型转换为:String,Number,Boolean

1.转换为String【转换后数据类型都是String】

  1. 使用toString()方法。
  2. 调用被转换数据类型的toString()方法。 toString方法有返回值
  3. 该方法不会影响原变量,它会将转化的结果返回。
  4. nullundefined没有 toString()方法。如果调用会报错
  5. 使用String函数

    • 调用String()函数,并将转换的数据作为参数返回;
    • 使用String()函数做强制类型转换时。

      • 对于Number和Boolean实际上就是调用toString()方法。
      • 对于null和undefined,不会调用toString()方法。会将null/undefined直接转换为"null/undefined"

2.转换为Number类型【转换后数据类型都是Number】

  1. 使用Number()函数转换

    1. 字符串转换为Number

      • 纯数字字符串,直接转换为数字
      • 字符串中含有非数字内容,则转换为NAN。
      • 如果是一个空串或者全是空格的字符,则转换为.
    2. 布尔类型转换为 数字 1,0
    3. null转换为 数字0
    4. undefined转换为 数字 NAN
    5. 对两个值进行减,乘,除法.这两个值都会变成都会转换成number
  2. 针对字符串转换为Number

    1. parseInt(a,b)函数把一个字符串转换为一个整数。
    2. parseFloat(a,b)把一个字符串转换为一个浮点数

      对于非String使用 parseInt()和parseFloat()会先转换成 String,在转化为Number

3.转换为Boolean类型

  1. 使用Boolean()函数

    • 数字 ---> 布尔

      • 除了0和NaN,其余都是true
    • 字符串 ---> 布尔

      • 除了空串,其余都是true
    • nullundefined都会转换为false
  2. 隐式转换

    • 对值进行两次取反,!!a,与Boolean()原理一样

4.转换为其他类型

  1. 十六进制 0X88
  2. 八进制 077
  3. 二进制 0b11
  4. "077"这种字符串,为了使浏览器表示正确,方法中使用参数。parseInt(a,10)解析十进制.

运算符

通过运算符可以对一个或多个值进行运算,并获得运算结果

比如:typeof是运算符,可以用来获得一个值的类型。它会将该值的类型以字符串的形式返回

number ,string , boolean ,undefined ,object

1. 算数运算符

当对非Number类型【除了字符串 加法 】的值进行运算时,会将这些值转换为Number然后进行计算;任何值与NaN运算都是NaN

  1. ( + )加法

    特殊:任何值与字符串相加都转化为字符串,后进行拼串操作。

    利用这一特点,进行任意数据类型隐性的String类型转换 【实际上也是调用String()函数

    reg = reg + ""; ===> typeof reg ---> string

result = 1 + 2 + "3"; // 33
result = "1" + 2 + 3; //123
  1. ( - * / )减,乘,除法

    对两个值进行减,乘,除法.这两个值都会变成都会转换成number,利用这一特点进行隐式Number转换

    -0*1/1三种方式。原理和Number()一样

  2. ( % )取模运算【取余数】

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

      • 不同的是--aa--的值不同
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. 运算符的优先级

运算符优先级表格。

优先级可以使用括号,改变优先级

最后修改:2022 年 01 月 02 日
如果觉得我的文章对你有用,请随意赞赏