JavaScript-自测题9

typeof返回值范围:

typeof返回值对应

类型结果
String“string”
Number“number”
Boolean“boolean”
Undefined“undefined”
Null“object”
Object“object”
function函数对象“function”
Symbol(ES6新增)“symbol”
宿主对象(由JS环境提供)Implementation-dependent

typeof的不足之处

  1. 不能区分对象、数组、正则,对它们操作都返回”object”;(正则特殊一点后面说)
  2. Safar5,Chrome7之前的版本对正则对象返回 ‘function’
  3. 在IE6,7和8中,大多数的宿主对象是对象,而不是函数;如:typeof alert; //object
  4. 而在非ID浏览器或则IE9以上(包含IE9),typeof alert; //function

特殊中的特殊

1
2
3
4
5
typeof 1/0; //NaN(这个NaN不是字符串类型,是数值类型)
typeof typeof 1/0; //NaN(这个NaN不是字符串类型,是数值类型)
typeof(1/0); //"number"
typeof typeof(1/0); //"string"
typeof(typeof 1/0); //"number"

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// Numbers
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // 尽管NaN是"Not-A-Number"的缩写
typeof Number(1) === 'number'; // 但不要使用这种形式!

// Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof总是返回一个字符串
typeof String("abc") === 'string'; // 但不要使用这种形式!

// Booleans
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // 但不要使用这种形式!

// Symbols
typeof Symbol() === 'symbol';
typeof Symbol('foo') === 'symbol';
typeof Symbol.iterator === 'symbol';

// Undefined
typeof undefined === 'undefined';
typeof declaredButUndefinedVariable === 'undefined';
typeof undeclaredVariable === 'undefined';

// Objects
typeof {a:1} === 'object';

// 使用Array.isArray 或者 Object.prototype.toString.call
// 区分数组,普通对象
typeof [1, 2, 4] === 'object';

typeof new Date() === 'object';

// 下面的容易令人迷惑,不要使用!
typeof new Boolean(true) === 'object';
typeof new Number(1) ==== 'object';
typeof new String("abc") === 'object';

// 函数
typeof function(){} === 'function';
typeof Math.sin === 'function';

//NaN
typeof 1/0 === 'NaN';

this

  1. this的值通常是由当前函数的执行环境所决定;
  2. 在全局作用域,this指向全局对象 (window对象);
  3. 当使用new关键字声明,this指向新建对象;
  4. 我们可以使用call(), bind(), apply()来设置this;
  5. 箭头函数不会绑定this。
  • 例题:
1
2
3
4
5
6
7
8
var test = function test() {
/* body... */
test = 1;
console.log(typeof test) //function
};
test();
test = 1;
console.log(typeof test); // number