1.假设val已经声明,可定义为任何值。则下面js代码有可能输出的结果为:
解释: 加号优先级高于 三目运算, 低于括号。 所以括号中无论真假 加上前边的字符串都为 true, 三目运算为true是 输出 define, 本题考查三目运算符的应用,运算符优先级,+>?:,前面’’value is’’是误导的,实际是整个表达式作为判断依据,因为’’value is ‘’+val是字符串,且肯定不为空,在javascript中非空字符串为true,所以输出defined
2. 以下代码输出结果为:
解释: 在 JS 里,声明函数只有 2 种方法:
第 1 种: function foo(){…} (函数声明);
第 2 种: var foo = function(){…} (等号后面必须是匿名函数,这句实质是函数表达式);
除此之外,类似于 var foo = function bar(){…} 这样的东西统一按 2 方法处理,即在函数外部无法通过 bar 访问到函数,因为这已经变成了一个表达式。
但为什么不是 “undefined”? 这里如果求 typeof g,会返回 undefined,但求的是 g(),所以会去先去调用函数 g,这里就会直接抛出异常,所以是 Error。
3.写出下面代码的运行结果
解析: var a=b=3 时a是局部变量,而b是全局变量;这段代码其实等价于:
4. 写出以下代码的运行结果:
解析:
instanceof运算符希望左操作数是一个对象,右操作数表示对象的类(初始化对象的构造函数)。如果左侧的对象是右侧对象的实例,返回true,否则返回false。
例如:计算o instanceof f
首先计算f.prototype,然后在原型链中查找o,找到返回true
===严格相等运算符:首先计算其操作数的值,然后比较这两个值,比较过程中没有任何类型转换
==相等运算符:如果两个操作数不是同一类型,那么会尝试进行一些类型转换,然后进行比较
尽管null和undefined是不同的,但它们都表示“值的空缺”,两者往往可以互换,因此==运算符认为两者是相等的
NaN表示非数字值,特殊之处:它和任何值都不相等,包括自身。判断NaN的方法: x!=x 返回 true
领取专属 10元无门槛券
私享最新 技术干货