- null和undefined具体在什么时候使用?
- 如果定义的变量准备用来保存对象,那么最好用将改变量初始化为null而不是其他值
- 如果未定义的值可以用空字符
- undefined是null派生出来的,所以undefined==null时返回的结果是true
2.局部变量和全局变量生命周期?
- 局部变量会在函数运行以后被删除。
- 全局变量会在页面关闭后被删除。
3.循环的具体使用场景
- for - 循环代码块一定的次数
- for/in - 循环遍历对象的属性
- for-of循环用来遍历数组
- while - 当指定的条件为 true 时循环指定的代码块
- do/while - 同样当指定的条件为 true 时循环指定的代码块
4.parseint支持16进制和8进制,不支持科学计数法,pasefloat只支持10进制 0b二进制 0o八进制 0x十六进制
多数情况下使用Number
5.基本类型没有属性和方法,能够使用属性和方法是因为他进行了封装,创建一个临时对象,使得我们可以调用对应对象的方法.
console.log("abc".charAt(0)); //a
Symbol.prototype.hello = () => console.log("hello");
var a = Symbol("a");
console.log(typeof a); //symbol,a 并非对象
a.hello(); //hello,有效
6:对象的两类属性
- 第一类属性,数据属性。它比较接近于其它语言的属性概念。数据属性具有四个特征。 在大多数情况下,我们只关心数据属性的值即可。 第二类属性是访问器(getter/setter)属性,它也有四个特征。 访问器属性使得属性在读和写时执行代码,它允许使用者在写和读属性时,得到完全不同的值, 它可以视为一种函数的语法糖。 我们通常用于定义属性的代码会产生数据属性,其中的 writable、enumerable、configurable 都默认为 true。我们可以使用内置函数 Object.getOwnPropertyDescripter 来查看,如以下代 码所示: value:就是属性的值。 writable:决定属性能否被赋值。 enumerable:决定 for in 能否枚举该属性。 configurable:决定该属性能否被删除或者改变特征值。
var o = { a: 1 }; Object.defineProperty(o, "b", {value: 2, writable: false, enumerable: false, configurable: true}); //a 和 b 都是数据属性,但特征值变化了 Object.getOwnPropertyDescriptor(o,"a"); // {value: 1, writable: true, enumerable: true, configurable: true} Object.getOwnPropertyDescriptor(o,"b"); // {value: 2, writable: false, enumerable: false, configurable: true} o.b = 3; console.log(o.b); // 2