javascript笔试题,如下,我想知道function f(){}为什么成立,为什么typeof f之后就是string类型
发布网友
发布时间:2022-05-15 14:12
我来回答
共4个回答
热心网友
时间:2022-05-15 15:41
function f(){}是建立一个函数对象,虽然函数内部的函数体是空的,但这个对象本身是真实存在的,所以用if进行条件测试时,它是等价于true的,所以是成立的。
typeof f 的返回值是个字符串(即"function"),把它与变量y的值(即数字1)进行字符串拼接后,结果也是字符串(即"1function"),所以就是string类型咯。
热心网友
时间:2022-05-15 16:59
很多代码,当你不懂的时候,你可以把它拆开来看。
我这么拆开,你可能就懂了。
var y=1;
f=function(){}//定义一个函数,不过函数体为空,本质来讲就是一个函数对象
if(f)//对象类型永远不为空,这不是对象实例,严格上上来讲f是一个类,
//但由于作用域的原因,这里的f在原来的if块内不可见,这么拆解,破坏了作用于,但不影响if判断
//跟int,string一样,是个类,类不可能为假
//空字符串,0,null,false这些为假,但string,number,bool不可能为假
{
stry=typeof y//显然typeof 返回字符串
y+=stry//数字+字符串,会自动转换成字符串
}
console.log(y)
不明白可追问
追问var a;var y=1;
console.log(a);console.log(a+y);
console.log(typeof a);console.log(typeof a+y);
我想知道console.log(a);时得到的是undefined,此时是什么类型
是所有数据遇到typeof xx,都会被转为string类型吗
热心网友
时间:2022-05-15 18:34
这题考的是 JS 预解析相关,预解析时,寻找行首为var, function 关键字的语句。
当 function 关键字在行首,它就是【函数声明语句】。
当 function 关键字不在行首,它就是【函数表达式】。
比如 (function () {}) (); 和 !function () {};
这题中 function 被 if( 挡住,所以是【函数表达式】,函数名 f 只能在函数体内使用(当前作用域)。
if 条件语句可以是任何值,但会被转成布尔类型,转成布尔值 非空即真,if 条件为true。
f 在这里是未声明的变量,类型为 undefined,typeof 输出字符串“undefined”。
1 + “undefined”拼接成字符串“1undefined”。
热心网友
时间:2022-05-15 20:25
我的理解是 function f() 返回布尔是true 执行if里面的语句 但是fc f()本身加了if的()变立即执行函数了 执行完销毁 所以typeof f 这个f是undefined 然后typeof undefined 返回的就是字符串的“undefined”局部可以访问到全局 所以是 1 + “undefined” 用到隐式类型转换 返回 “1undefined"