JavaScript--面试笔试 之Typeof

64 阅读3分钟

JavaScript相关面试

JavaScript的基础数据类型以及变量

https://juejin.cn/post/7288962917399035956

typeof

arguments

function(){return typeof arguments;} 解释:arguments是对象,参数是数组一样的物体,可以使用方括号和整数索引的元素; Array.prototype.slice.call(arguments); 转成数组,即使此时是数组,返回的依旧是object,数组也是属于对象

g()声明函数

// 在函数外部无法通过g访问到函数,这已经变成了一个表达式

var f = function g(){ return 23; };
typeof g();

报错error;g()是一个名字不是函数声明;
函数时绑定在变量F上面,不是g

typeof g() //error
返回的是g()执行结果的类型

typeof g //undefined
是指返回f的类型

typeof f //function

typeof f() //number

js中声明函数的方法

function foo(){}
//等号后面必须是匿名函数,
var foo = function(){...}

delete

//delete操作符 删除对象的属性
(function(x){
    delete x;
    return x;
})(1);

对于引用类型的值,delete删除了对象属性的本身,不会删除属性指向的对象

当删除的对象属性,有对象属性的一个内部属性,(严格模式)拥有该内部属性时不能被删除,并且此时不返回“false”,而是抛出异常

/* 'foo' 是全局对象的一个属性, 它通过变量声明而生成,因此拥有内部属性 DontDelete 这就是为什么它不能被删除 */ 
var foo = 1; 
delete foo; // false
typeof foo; // "number"

/* 'bar' 是全局对象的一个属性, 它通过变量声明而生成,因此拥有 DontDelete 这就是为什么它同样不能被删除 */ 
function bar() {}; 
delete bar; // false
typeof bar; // "function"

delete不能删除变量,函数,但是可以删除一个对象的属性

重写代码

var y = 1, 
x = y = typeof x;
x;//undefined
//解释
var a,b;
A=B=C === >  B=C=B
var y = 1;
y = typeof x; //此时x还没有被定义

参考JavaScript面试题目

扩展

//null 代表的是空指针 ,类型标签是0
typeof null === "object"
// 数值
typeof 37 === "number";
typeof 3.14 === "number";
typeof Math.LN2 === "number";
typeof Infinity === "number";
typeof NaN === "number";
// 尽管它是 "Not-A-Number" (非数值) 的缩写
typeof Number(1) === "number"; 
// Number 会尝试把参数解析成数值
typeof Number("shoe") === "number"; // 包括不能将类型强制转换为数字的值

typeof 42n === "bigint";

// 字符串
typeof "" === "string";
typeof "bla" === "string";
typeof `template literal` === "string";
typeof "1" === "string";
// 注意内容为数字的字符串仍是字符串
typeof typeof 1 === "string"; 
// typeof 总是返回一个字符串
typeof String(1) === "string"; 
// String 将任意值转换为字符串,比 toString 更安全

// 布尔值
typeof true === "boolean";
typeof false === "boolean";
typeof Boolean(1) === "boolean";
// Boolean() 会基于参数是真值还是虚值进行转换
typeof !!1 === "boolean";
// 两次调用 !(逻辑非)运算符相当于 Boolean()

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

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

// 对象
typeof { a: 1 } === "object";

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

typeof new Date() === "object";
typeof /regex/ === "object";

// 下面的例子令人迷惑,非常危险,没有用处。避免使用它们。
typeof new Boolean(true) === "object";
typeof new Number(1) === "object";
typeof new String("abc") === "object";

// 函数
typeof function () {} === "function";
typeof class C {} === "function";
typeof Math.sin === "function";

本文由mdnice多平台发布