首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript 类型的那些事

从上面的代码我们可以看到toString是可依赖的,不管是object类型还是primitive类型,它都能告诉我们正确的结果。...但它只可以用于判断内置的数据类型,对于我们自己构造的对象,它还是不能给出我们想要的结果,比如下面的代码: function Person() { } var a = new Person(); // [...ToPrimitive 当我们需要将变量转换为原始类型时,就需要用到ToPrimitive,下面的代码说明了ToPrimitive的内部实现原理: // ECMA-262, section 9.1, page...下面来个实例,({}) + 1(将{}放在括号中是为了内核将其认为一个代码块)会输出啥?可能日常写代码并不会这样写,不过网上出过类似的面试题。...'); } 你觉得会不会输出something呢,答案是会的,所以这也是为什么很多代码规范推荐使用===三等了。

70110

探究{ a = 1; function a(){} }和{ function b(){}; b = 1 }

结果两个情况的输出结果都是代码块里面的第一个,咦,好像和之前所学的变量提升有点不一样。我们下面开始探究一 本文基于chrome展开研究。...是没有块级作用域的,所以下面代码输出了2 var a = 1; { var a = 2; }; console.log(a); // 2 复制代码 而let、const是有块级作用域的,如下输出了1...但是打点看一,有点不一样——第一个点Global里面的a为什么不是函数而是undefined // 开始打点 debugger; // Global => a: undefined { debugger...第一个点Global里面的a为什么不是函数而是undefined,第三个点Global的a为什么undefined而不是1,而且要在function a(){}后面才开始赋值1?...具体为什么呢,大概是浏览器的内部代码块的实现方式了 只有第一次a函数声明会“传递”,后面的a函数声明只会把上一句赋值语句(a = xxx)的值“传递”到全局 我们可以试一,利用这些规律猜一输出结果

1.7K81
您找到你想要的搜索结果了吗?
是的
没有找到

72笔试面试题

cookie会在请求头中一起发送给服务器,另外两个则不参与通信 2、判断以下js代码是否正确,并描述原因 A "undefined" == undefined B "8889" == 8889 A的结果是...3、请问以下代码最终输出结果是什么 (function () { var a = b = 345; })(); console.log(b); console.log(typeof(a)); 输出结果...345,undefined,a是通过var关键字进行生命,属于函数内部的局部作用域,而b被分配到全局作用域,所以在后边可以访问到b的值。...如果在函数内部使用了严格模式的话,代码会在输出b的时候报错Uncaught ReferenceError: b is not defined 4、请用javascript将字符串"http://www.alipay.com...问题大概有下面这些: 为什么选择使用React 数组遍历的区别(for、for...in、for...of、forEach、Map) 使用Symbol.iterator可以为对象添加可迭代属性

86720

探究{ a = 1; function a(){} }和{ function b(){}; b = 1 }

(123); }; // 这种写法,chrome可以不加分号,一些其他的浏览器(safari)需要加分号否则报错 // 为了稳妥,所以还是加分号吧 块级作用域 对于var是没有块级作用域的,所以下面代码输出了...但是打点看一,有点不一样——第一个点Global里面的a为什么不是函数而是undefined // 开始打点 debugger; // Global => a: undefined { debugger...第一个点Global里面的a为什么不是函数而是undefined,第三个点Global的a为什么undefined而不是1,而且要在function a(){}后面才开始赋值1?...这个题目答案的表现就是,代码块里面先声明什么,最终a的结果就是什么。问题转化成为:为什么外层的a是代码块的第一个声明的a?...具体为什么呢,大概是浏览器的内部代码块的实现方式了 只有第一次a函数声明会“传递”,后面的a函数声明只会把上一句赋值语句(a = xxx)的值“传递”到全局 我们可以试一,利用这些规律猜一输出结果

11710

系统学习 TypeScript(六)——认识接口

[TypeScript] 前言 接口是我们在进行模块、方法等的封装时经常会用到的一个概念,使用接口可以: 将一类具体事务抽象成单一的对象方法,使用者不必关心内部的实现逻辑,只需要按照要求传入对应的参数即可得到预期的结果输出...read properties of undefined (reading 'name') 由于 JavaScript 没有静态类型检查机制,在代码真正运行前无法准确判断可能会出现的问题。...经常在调用一个接口前,还需要研究一这个接口相关的源码,这很不利于协同开发。 我们迫切需要一种能够在方法调用时明确显示所需参数类型及格式的机制。...为什么要用 TypeScript 接口? 上面两段代码暴露出两个问题: 没有类型检查器的机制不利于协同开发; 常规的 TypeScript 类型检查器写法容易造成代码冗余。...并且还引出了一个疑惑点,大家可以就这个问题给出自己的见解,欢迎在评论区交流! ~ ~ 本文完,感谢阅读! ~ 学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

27500

【前端芝士树】Js中的闭包是怎么一回事 && 笔试问题集锦

> 执行期 会按照代码块的顺序筑行执行 正因为从外部访问在函数内部进行声明的局部变量是不可能的,所以出现了闭包这种形式,在函数内部再定义一个函数。 闭包(Closure)是什么?...查阅了一些文章和资料,发现还是下面的定义最容易理解: 闭包:定义在函数内部的一个函数。 扩展一些讲,可以参考一阮一峰的讲解: 闭包:能够读取其他函数内部变量的函数。...return f2; } var result=f1(); result(); // 999 如此段代码所示,f2()就是其中的闭包函数,通过f2()我们可以访问到f1()内部的n。...a.fun(3); var b = fun(0).fun(1).fun(2).fun(3); var c = fun(0).fun(1); c.fun(2); c.fun(3); 看解答前先思考一输出什么哦...0 最后,输出结果如下 var a = fun(0); a.fun(1); a.fun(2); a.fun(3); undefined 0 0 0 搞清楚第一个的过程,第二个的破解关键就在于闭包让函数内部的变量始终保存在内存之中

21810

《JavaScript 模式》读书笔记(4)— 函数3

再多说两句,个人理解: // 我们先来看,为什么面的代码访问不到property属性。...console.log(scareMe.property); //输出undefined   这是为什么呢?在第一次执行scareMe()方法后,就找不到property属性了。...那么,我们再看代码: // 我们先来看,为什么面的代码访问不到property属性。...最后,再说一为什么赋值给一个其它名字的变量以及用对象的方法来使用的时候,重定义永远没有发生。...全局对象是以参数方式传递给即时函数的,以便于在不使用window指定全局作用域限定的情况可以在函数内部访问该对象,这样将使得代码在浏览器环境之外时具有更好的操作性。

37620

JS学习笔记

其实输出的结果是doSomething。这就引出了我们的问题了,当函数声明与其他声明一起出现的时候,是以谁为准呢?答案就是,函数声明高于一切,毕竟函数是js的第一公民。 那么,下面的例子呢?...以上代码输出结果为2。 因为有多个函数声明的时候,是由最后面的函数声明来替代前面的。...原因: 在执行getData()方法的时候会在函数内部首先将变量的声明提升到第一步。 然后再声明函数内部的函数(如果函数内部有函数的话)。 之后才会按照方法内部的逻辑先后顺序执行代码。...看到这里应该就已经知道为什么会有上面那样的结果了。 实际的方法内部代码执行顺序应该是这样的: function getData(){ //一。声明变量 var data; //二。...为什么有变量提升 那么为什么会出现变量提升这个现象呢? 其实js和其他语言一样,都要经历编译和执行阶段。

35850

《JavaScript 模式》读书笔记(4)— 函数3

再多说两句,个人理解: // 我们先来看,为什么面的代码访问不到property属性。...console.log(scareMe.property); //输出undefined   这是为什么呢?在第一次执行scareMe()方法后,就找不到property属性了。...那么,我们再看代码: // 我们先来看,为什么面的代码访问不到property属性。...最后,再说一为什么赋值给一个其它名字的变量以及用对象的方法来使用的时候,重定义永远没有发生。...全局对象是以参数方式传递给即时函数的,以便于在不使用window指定全局作用域限定的情况可以在函数内部访问该对象,这样将使得代码在浏览器环境之外时具有更好的操作性。

40840

JS学习笔记

其实输出的结果是doSomething。这就引出了我们的问题了,当函数声明与其他声明一起出现的时候,是以谁为准呢?答案就是,函数声明高于一切,毕竟函数是js的第一公民。 那么,下面的例子呢?...以上代码输出结果为2。 因为有多个函数声明的时候,是由最后面的函数声明来替代前面的。...之后才会按照方法内部的逻辑先后顺序执行代码。前两步只是声明!!! 看到这里应该就已经知道为什么会有上面那样的结果了。...实际的方法内部代码执行顺序应该是这样的: function getData(){ //一。声明变量 var data; //二。...为什么有变量提升 那么为什么会出现变量提升这个现象呢? 其实js和其他语言一样,都要经历编译和执行阶段。

35230

经典面试题解析

首先分析一这段代码的具体执行过程。...我们来分析一这段代码到底是怎么执行的,就会明白为什么结果与我们预想的完全不同,甚至可以说很怪异。...忽略了这段语句后,等于是只输出b,也就是输出函数本身。之后,我们在全局输出b,根据上面的说法,我们无法在NFE函数外部访问NFE的函数名,所以这里的b代表的不是函数,而是用let声明的那个变量b。...接下来再来看一 bind() 的 polyfill 代码: bind() 实际上也是通过 apply() 实现的 —— 原理就是返回一个包装函数,这个函数在内部对初始函数完成了 this binding...这也是为什么说 bind() 是 tight binding 的原因,一旦绑定就很难再改变。 理解这一点之后,再来看上面的题就简单了。

60240

前端必备,25个最基本的JavaScript面试问题及答案

$.isArray(bar))); 2.下面的代码输出什么到控制台,为什么? (function(){ var a = b = 3; })(); console.log("a defined?...(还是你为什么应该理所当然地在代码中使用 use strict 的最好例子!) 3.下面的代码输出什么到控制台,为什么?...当试图删除一个不可配置的属性时,非严格代码将默默地失败,而严格模式将在这样的情况抛出异常。 6.考虑以下两个函数。它们会返回相同的东西吗? 为什么相同或为什么不相同?...15.下面的代码输出什么到控制台,为什么?...这就解释了为什么,有些令人奇怪的是, 1 && 2返回 2(而不是你以为的可能返回 true 或 1)。 20.执行下面的代码时将输出什么?请解释。

91430
领券