js基础知识回顾(1)

269 阅读4分钟

最近在看js的一些比较基础的东西,自己记录一下自己觉得比较容易遗忘或者混淆的知识点,方便自己温习,不足的地方还望大家支出更正,感谢!!!

单刀直入

  js的基本数据类型(7 种原始类型和 1 种引用类型)
  Number String  BigInt Boolean Symbol null undefined Object     
      

Number类型

     除了一些常规数字,还有一些特殊值也属于number类型: `Infinity``-Infinity` 和 `NaN``NaN` 代表一个计算错误。它是一个不正确的或者一个未定义的数学操作所得到的结果
    Infinity 代表无穷大的数 可以通过除以0得到   
    1/0               //Infinity
    typeof Infinity   //number 
    "not a number" / 2 //NaN

类型转换

// number 类型转换规则:
// undefined  --> NaN
// null  --> 0
// true/false --> 1/0
//string --> 去掉首位尾空格 剩余的字符串为空 转为 0   不为空 从字符串“读取”数字,读到 不为数字 时出现错误    提取失败 为NaN
//  parseInt()// 从前面截取到不是数字的地方 转为数字


Number(null) // 0
Number(undefined) //NaN 
Number('12a')//NaN
Number("1 2")//NaN
parseInt("12a")//12 
// boolean 类型转换规则:
// 布尔值转换 除了null  0 undefined NaN ''  为false 其余都为true
Boolean(null) //false
Boolean(0) //false
Boolean(undefined) //false
Boolean(NaN) //false
Boolean('') //false 

//注意
Boolean(" ")//true
Boolean("0")//true

运算符

    取余 : %  
    6 % 2  //0  6除以2的余数为0
    8 % 3  //2  8除以3的余数为2 
    求幂 : **
    求幂运算 a ** b 是 a 乘以自身 b 次
    2 ** 2  // 4 (2 * 2)
    2 ** 3  // 8 (2 * 2 * 2)
    2 ** 4  // 16(2 * 2 * 2 * 2)
    求幂的定义也适用于非整数
    9** (1/2) // 3 (4开平方分)
    8** (1/3 // 2  (8开立方根)
    
    **运算元**(运算符应用的对象。比如说乘法运算 `5 * 2`,有两个运算元:左运算元 `5` 和右运算元 `2`1. 如果一个运算符对应的只有一个运算元,那么它是 **一元运算符**。  
        let a = 1;
        a = -a   //一元负号运算符生效
    2.如果一个运算符拥有两个运算元,那么它是 **二元运算符**
        let x = 1, y = 3; 
        ( y - x ); // 2,二元运算符减号做减运算
        
    3.1一元运算符加号,或者说,加号 `+` 应用于单个值,对数字没有任何作用。但是如果运算元不是数字,加号 `+` 则会将其转化为数字。   
        +true   // 1
        +''     //0
       字符串求和  
       let a= '2' , b = '3'
       +a + +b  // 5

     3.2数字连接 + 如果有一个是字符串  则为拼接   唯一一个以这种方式支持字符串的运算符 
     运算符运算在运算等级相同的情况下遵循 从左至右的执行顺序
     2 + 2 + '1' //41 
     '1' + 2 + 2 //122 
 有趣的对比
 let a = 0 ,b = '0';
 Boolean(a) // false
 Boolean(b) // true
 a == b //true   

因为 JavaScript 会把待比较的值转化为数字后再做比较(因此 "0" 变成了 0)。若只是将一个变量转化为 Boolean 值,则会使用其他的类型转换规则。上面有boolean类型的转换规则(布尔值转换 除了null 0 undefined NaN '' 为false 其余都为true)

值的比较

字符串的比较 只有两个不同类型的值比大小时才会转换为数字

   2 > 12  //false
   '2' > 12//false
   '2' > '12' //true

null和undefined的比较

  null === undefined //false  它们不相等,因为它们属于不同的类型。
  null == undefined //true   JavaScript 存在一个特殊的规则,会判定它们相等。
  
  • 当使用数学式或其他比较方法 < > <= >= 时:

  • null/undefined 会被转化为数字:null 被转化为 0undefined 被转化为 NaN

    null > 0  //false  (1)
    null == 0 //false  (2)
    null >= 0  //true  (3)

在最后一行代码显示null 大于等于 0 情况下,前两行代码中一定会有一个是正确的,然而事实表明它们的结果都是 false。 因为相等性检查(==)和> < >= <= 的逻辑代码是相互独立的,进行值比较的时候 null 会被转化为 0 。这就是为什么(3)返回值为true (1)中返回值为false 另一方面,undefined 和 null 在相等性检查 == 中不会进行任何的类型转换 ,它们有自己独立的比较规则,所以除了它们之间互等外,不会等于任何其他的值。这就解释了为什么(2)中 null == 0 会返回 false。

  • undefined 不应该被与其他值进行比较

      undefined > 0  //false
      undefined < 0 //false
      undefined == 0 // false
    

原因如下:

  1. (1) 和 (2) 都返回 false 是因为 undefined 在比较中被转换为了 NaN,而 NaN 是一个特殊的数值型值,它与任何值进行比较都会返回 false
  2. (3) 返回 false 是因为这是一个相等性检查,而 undefined 只与 null 相等,不会与其他值相等。 ......

夜深了,暂时就先到这吧,后面边看边记录,素材资料来自 现代 JavaScript教程 ,感兴趣的各位可以移步观看。