1、声明变量未给其赋值
1)函数词法作用域内,变量提升
var str = "123"; function add1() { console.log(str) // undefined var str = "456"; } add1()
这里str 的值为undefined , 因为在词法分析完,构建函数作用域链的时候,函数局部变量已经声明未进行赋值,函数内部都是可见的。
2、return关键字后没有任何表达式,则该函数返回undefined
3、读取一个不存在的属性
4、获取不存在的数组元素
var arr = [] console.log(arr[1]) //undefined
5、函数参数,当实参个数少于形参个数时,多余的形参为undefined
function add1(a,b,c) { console.log(a) // 1 console.log(b) // undefined console.log(c) // undefined } add1(1)
6、let变量不属于全局属性
let g = 3 console.log(window.g) //undefined
7、解构不成功
let [a,b,c,d] = [1,2,3] console.log(d) //undefined