【JS基础知识点】JS有哪些容易忽视的基础知识点?

55 阅读3分钟

学习链接: javascript.info

JS基础知识

运算符

算数运算符

算术运算符使用数值 (字面量或者变量) 作为操作数并返回一个数值。标准的算术运算符就是加减乘除 (+ - * /)。当操作数是浮点数时,这些运算符表现得跟它们在大多数编程语言中一样(特殊要注意的是,除零会产生Infinity

  1. 加号
  • 两边都是数值类型时进行求和运算,如果数值+布尔值会直接把布尔类型转换成 1 or 0 来进行运算
  • 字符串+任何类型数据 = 拼接之后的新字符串
  • 可以将“数值字符串”转成 数值,比如 +'1'

比较运算符

在比较不同类型的数据时,JS会把他们转换为数字再判定大小,但有一个特例,null == undefined,在非严格相等的情况下,这两者只等于对方,与其他不相等。

非严格相等与大于小于运算符是两个独立的逻辑,因此会出现以下情况

null == undefined //true
null === undefined //false
null == 0 //false  null只和undefined非严格相等
null >= 0 //true   null转换为数字0,因此满足大于等于0

undefined

undefined不应该和其他值进行比较,因为它在比较的时候被转换为了NaN, 而NaN是一个特殊的数值,它与任何其他值进行比较都会返回false。

undefined只与null相等

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

什么时候为undefined

  1. 声明后的变量未初始化
  2. 访问一个对象不存在的属性会返回undefined
  3. 在调用函数时缺省参数,则该参数为undefined
  4. 在JavaScript中,没有任何return语句的函数隐式地返回undefined
  5. void运算,返回undefined
  6. 访问数组中不存在的元素(比如下标超出界限),返回undefined

如何安全的获取undefined的值

使用void运算符

let a = void 1;

void

void运算,计算一个表达式,不返回计算结果,所以返回值为undefined

void 1;                    // => undefined  
void (false);              // => undefined  
void {name: 'John Smith'}; // => undefined  
void Math.min(1, 3);       // => undefined  

函数声明与函数表达式

函数是一种特殊的值,可以通过函数声明的方式进行创建,也可以通过函数表达式的方式进行创建。

注意: 函数声明在被定义之前,就可以被调用。因为JS准备运行脚本时,首先会在脚本中寻找全局函数声明,并创建这些函数。在处理完这些函数声明后,代码才会被执行。所以运行时能够使用这些函数。如果是函数表达式的形式,则不会被提前调用,因为函数表达式只有在代码执行到它时才会被创建。

对象

创建对象有两种方式:

  1. 构造函数的语法 let user = new Object()
  2. 字面量的语法 let user = {}

对象的属性

对象可以使用 对象.属性的方式来获取属性的值,如果属性包括空格、以数字开头或包含特殊字符时,只能使用方括号来获取属性值

user.name = 'xiaoming'
user["likes bird"] = true

方括号

当创建一个对象时,我们可以在对象字面量中使用方括号,这叫做计算属性

let name = prompt("what is your name?", "xiaoming");
let user = {
    [name]: 5, //属性名是从name变量中得到的
}

上面的写法与下面的语法效果相同:

let name = prompt("what is your name?", "xiaoming");
let user = {};
user[name] = 5;

属性名

对象的属性命名没有限制,可以使任何字符串或者symbol,其他类型会被自动转换为字符串,例如,当数字0被用作对象属性的键时,会被转换为'0'

let obj = {
    0: "test"
}
alert(obj[0]) //test
alert(obj['0']) //test

判断属性是否存在

语法"key" in Object,返回true或者false

遍历对象:for (let key in Object)循环