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还没有被定义
扩展
//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多平台发布