变量:
在应用程序中,使用变量来作为值的符号名。变量的名字又叫做标识符。
变量求值:
用 var 或 let 语句声明的变量,如果没有赋初始值,则其值为 undefined。此时的undefined是“值”。
var x; //创建一个变量,但并没有赋值
console.log("X的值是", x) //返回X的值是undefined
数据类型(7+1种):
下表左边是数据类型,右边是该数据类型对应的数据的值。(有点拗口),想要强调的是此处的undefined与null,既表示数据类型,又表示值。
- undefined:只有一个值:undefined
- null: 只有一个值:null
- Number:整数或浮点数
- String:一串表示文本值的字符序列
- Boolean:值是 true / false
- BigInt:可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制。
- Symbol:实例是唯一且不可改变的数据类型
- Object
undefined与null区别
undefined:定义未赋值
null:定义值为null
什么时候用null:
- 初始赋值,表明即将赋值为对象
- 结束前让对象成为垃圾对象(被垃圾回收器回收)
判断数据类型的方式
typeof
- 返回数据类型的字符串表达,且都是小写形式。
- 可以区别:数值、字符串、布尔值、undefined、function;
- 不能区别:null与object、一般object与array。
- 重点:typeof null => ‘object’, typeof function(){} => 'function’
instanceof
- 专门用来判断对象数据的类型:Object、Array与Function。
===(因为数据类型null、undefined只有一个值)
- 可以判断:undefined和null。
js的标准内置对象
标准内置对象即全局对象,即处在全局作用域里的多个对象,这些对象的属性和方法即为全局属性和全局函数。
标准内置对象分类:
- 值属性(这些全局属性返回一个简单值,这些值没有自己的属性和方法。)
– undefined(划重点!undefined是全局属性)
– Infinity
– NaN
– globalThis- 函数属性(全局函数可以直接调用,不需要在调用时指定所属对象,执行结束后会将结果直接返回给调用者。)
– parseInt()
– eval()
– …- 基本对象(基本对象是定义或使用其他对象的基础。基本对象包括一般对象、函数对象和错误对象。)
– 一般对象(Object、Function、Boolean、Symbol)
– 错误对象(Error、ReferenceError、TypeError…)
– 数字和日期对象(Math、Date、Number…)
– …
全局属性包括undefined,但是没有null!!! 全局属性undefined只会返回一个简单值undefined,返回的简单值undefined的数据类型是基本数据类型undefined。
全局属性undefined 的属性特性: | |
---|---|
writable | false |
enumerable | false |
configurable | false |
全局属性undefined的属性特性表明:undefined是一个不能被配置(non-configurable),不能被重写(non-writable)的属性。即便事实并非如此,也要避免去重写它。但是它有可能在非全局作用域中被当作标识符(变量名)来使用 (因为undefined不是一个保留字!!!) ,这样做是一个非常坏的主意,因为这样会使你的代码难以去维护和排错,这是 JavaScript 语言公认的设计失误之一。
JavaScript 保留关键字
在 JavaScript 中,一些标识符是保留关键字,不能用作变量名或函数名,因为这些保留关键字是作为 Javascript 以后扩展使用。
null是保留字,但是undefined不是!
总结:
在全局作用域中无法将undefined当作标识符来使用,因为undefined是全局属性,即全局中已经有了undefined这个变量,重复声明也会报错。
在局部作用域中将undefined当作标识符来使用不会报错,但是会改变undefined的值和类型,不建议使用。
代码验证一下
undefined可以作为关键字,但是null不可以,会提示错误:null不可以作为关键字。
F12中验证一下:
全局作用域使用undefined作为标识符也会报错:
局部作用域中使用undefined作为标识符不会报错,但是不推荐使用
获取undefined的值
如果想要获取undefined的值,又担心undefined有可能中途被修改过,可以使用void 0来获取undefined。
void 运算符: 对给定的表达式进行求值,然后返回 undefined。
即void后面跟上任何的表达式或者代码都是返回undefined,但是为了减少字节,更推荐直接使用void 0。且void 0 占用的字节也少于undefined。
var x;
if(x === void 0) {
// 执行这些语句
}
// 没有声明y
if(y === void 0) {
// 抛出一个RenferenceError错误(与`typeof`相比)
}
var m;
if(typeof m === 'undefined') {
// 执行这些语句
}
// 这里没有声明z
if(typeof z === 'undefined') { // 没有错误,执行结果为true
console.log("z is " + typeof y ) // z is undefined
}
if(e === undefined) { // ReferenceError: e is not defined
}