1typeof和instanceof
typeof用以获取一个变量或者表达式的类型,typeof一般只能返回如下几个结果:
number,boolean,string,function(函数),object(NULL,数组,对象),undefined。
正因为typeof遇到null,数组,对象时都会返回object类型,所以当我们要判断一个对象是否是数组时
或者判断某个变量是否是某个对象的实例则要选择使用另一个关键语法instanceof.instanceof用于判断一个变量是否某个对象的实例

2构造函数和new

3原型规则和原型链
1所有的引用类型都有一个__proto__的属性,属性值是一个普通的对象。
2所有函数都有一个prototype属性,属性值也是一个普通对象。
3所有的引用类型,__proto__属性指向它的构造函数的prototype属性值。
4当试图找到一个对象的属性时,如果这个对象没有这个属性,那么会去它的__proto__中寻找。
4switch 结构
每个case代码块内部的break语句不能少,否则会接下去执行下一个case代码块,而不是跳出switch结构。
var x = 1;
switch (x) {
case 1:
console.log('x 等于1');
case 2:
console.log('x 等于2');
default:
console.log('x 等于其他值');
}
// x等于1
// x等于2
// x等于其他值
上面代码中,case代码块之中没有break语句,导致不会跳出switch结构,而会一直执行下去。正确的写法是像下面这样。
switch (x) {
case 1:
console.log('x 等于1');
break;
case 2:
console.log('x 等于2');
break;
default:
console.log('x 等于其他值');
}
需要注意的是,switch语句后面的表达式,与case语句后面的表示式比较运行结果时,采用的是严格相等运算符(===),而不是相等运算符(==),这意味着比较时不会发生类型转换。
var x = 1;
switch (x) {
case true:
console.log('x 发生类型转换');
break;
default:
console.log('x 没有发生类型转换');
}
// x 没有发生类型转换
5null和undefined
null是一个表示“空”的对象,转为数值时为0;undefined是一个表示"此处无定义"的原始值,转为数值时为NaN。
Number(null) // 0
5 + null // 5
Number(undefined) // NaN
5 + undefined // NaN
6布尔值
如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true。
undefinednullfalse0NaN""或''
注意,空数组([])和空对象({})对应的布尔值,都是true。
if ([]) {
console.log('true');
}
// true
if ({}) {
console.log('true');
}
// true
7NaN
NaN不是独立的数据类型,而是一个特殊数值,它的数据类型依然属于Number,使用typeof运算符可以看得很清楚。
typeof NaN // 'number'
NaN不等于任何值,包括它本身。
NaN === NaN // false
0 / 0 // NaN
1 / 0 // Infinity
1 / -0 // -Infinity
-1 / -0 // Infinity
8函数表达式
采用函数表达式声明函数时,function命令后面不带有函数名。如果加上函数名,该函数名只在函数体内部有效,在函数体外部无效。
var print = function x(){
console.log(typeof x);
};
x
// ReferenceError: x is not defined
print()
// function
上面代码在函数表达式中,加入了函数名x。这个x只在函数体内部可用,指代函数表达式本身,其他地方都不可用。
本文深入探讨JavaScript中的类型检测方法,包括typeof和instanceof的使用,以及它们在判断变量类型和实例关系中的作用。同时,解析了switch结构的正确应用,避免因缺少break语句导致的连续执行问题。此外,还讨论了null与undefined的区别,布尔值的自动转换规则,以及NaN的特性。
182

被折叠的 条评论
为什么被折叠?



