那些年坑爹的JS题目

真是让人疑惑的基础。又是一堆奇怪的题目。

题目一. 应该是关于作用域的
function test(n) {
  this.x = n;
  return this;
}
var x = test(1);
var y = test(2);
console.log(x === y);  // true
console.log(x.x, y.x); // 2 2
题目二. 关于 基本数据类型 和 引用数据类型

这题已经坑过了非常多的人。不仅仅是作为题目。

下面这两行是会报错的。

var f = function(){}
(function(){})();

下面这个就不报错,虽然和 之前的代码实际上效果是一样的。

var f = function(){}
+function(){}();

js 报错(intermediate value)(...) is not a function

题目三. JS 判断 - 极度坑爹
console.log(true == 'true');  // false

题解之高程三第三章 相等操作符 原则:

  • 1.如果有一个操作数是 bool 值。则比较之前:先将 true 变为 1,false 变为 0
  • 2.如果一个操作数是字符串,另一个操作数是字符,则比较之前:字符串 -> 数字(Number的方式)
  • 3.如果一个操作数是对象,另外一个不是,则调用对象的 valueOf 方法。

所以,这么看的话,就不奇怪了。

console.log(true == 'true');  // false
console.log(1 == 'true');       //false
console.log(1 == parseInt('true'));       //false
console.log(1 == NaN);        //false

根据 NaN 的 无敌 特性: 我跟任何人都不一样(不相等).所以

console.log(false == 'true');  // false
console.log(false == 'true');       //false
console.log(false == parseInt('true'));       //false
console.log(false == NaN);        //false

顺便来谈谈 对象类的 判断

console.log("" == ""); // true  基本数据类型
console.log([] == []); // false 引用数据类型 
console.log({} == {}); // false 引用数据类型
console.log(new String("") == new String(""));  // false 引用数据类型
题目四. 函数提升问题
var f = function(){return true};
var g = function(){return false};

function g(){};
(function(){
  if(g() && []!==[]) {
    f = function(){return false};
    function g() {return true};
  }
})();
console.log(f());
console.log(g());

转载于:https://www.cnblogs.com/can-i-do/p/8573237.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值