1.请看下列代码:

function F(){function C(){ return this; } return C(); } var o=new F();

请问上面的this值指向的是全局对象还是对象o?

答:全局对象。

function C(){return this; }

这里面this指向了全局对象,

在return C();时,调用C方法,返回了全局对象,
然后return了全局对象。
在new构造函数时,如果构造函数没有return语句,返回的是构造函数的this,如果有return语句,并且return的是一个对象,那么new出来的就是return的这个对象;如果return一个基本类型的对象,那么new出来还是构造函数的this。
所以在最后return C()的时候相当于return 全局对象,全局对象不是基本类型,所以o指向的全局对象。

2.下面代码的执行结果会是什么?

function C(){this.a=1; return false; } console.log(typeof new C());

跟上面这个题考点一样啊。。。
输出object

3.下面这段代码的执行结果又将是什么?

var c=[1,2,[1,2]];
c.sort(); c.join("--"); console.log(c);
  • 1
  • 2
  • 3
  • 4

答:[1,[1,2],2]
sort完以后数组变成这样,join方法不改变数组。
如果题目是

var c=[1,2,[1,2]];
c.sort(); c=c.join("-"); console.log(c);

最后输出join的结果,是 1-1,2-2

这个结果好有迷惑性,如果没想通仔细想一下,我是晕了会才发现就这样啊。。。

4.在String()构造函数不存在的情况下自定义一个MyString()的构造器函数。记住,由于String()不存在,因此您在写构造器函数时不能使用任何属于内建String对象的方法和属性。并且要让您所创建的对象通过以下测试:

var s = new MyString("hello");
s.length;  //5s[0]; //"h" s.toString(); //"hello" s.valueOf(); //"hello" s.charAt(1); //"e" s.charAt("2"); //"l" s.charAt("e"); //"h" s.concat(" world!"); //"hello world!" s.slice(1,3); //"el" s.slice(0,-1); //"hell" s.split("e"); //["h","llo"] s.split("l"); //["he","","o"]

如果您觉得这个练习很有趣,可以不用止步于join()方法,继续为其创建尽可能多的方法。

参考答案:

    function MyArray(){this.length=arguments.length; for(var i=0;i<this.length;i++){ this[i]=arguments[i]; } this.toString=function(){ var resultStr=""; for(var i=0;i<this.length;i++){ if(i===this.length-1){ resultStr+=this[i].toString(); }else{ resultStr+=this[i].toString()+","; } } return resultStr; }; this.push=function(obj){ this[this.length]=obj; this.length++; return this.length; }; this.pop=function(){ if(this.length===0){ return null; } result=this[this.length-1]; this[this.length-1]=undefined; this.length--; return result; }; this.join=function(str){ var resultStr=""; for(var i=0;i<this.length;i++){ if(i===this.length-1){ resultStr+=this[i].toString(); }else{ resultStr+=this[i].toString()+str; } } return resultStr; } }

7.在Math对象不存在的情况下,创建一个类似的MyMath对象,并为其添加以下方法:
1)MyMath.rand(min,max,inclusive)-随机返回min到max区间中的一个数,inclusive为true时为闭区间(这也是默认情况)。
2)MyMath.min(array)-返回目标数组中的最小值。
3)MyMath.Max(array)-返回目标数组中的最大值。

参考答案:

    function MyMath(){}MyMath.rand=function(min,max,inclusive){ if(typeof min!=="number"){ throw new Error("type error"); return; } if(typeof max!=="number"){ throw new Error("type error"); return; } if(min>max){ throw new Error("parameter error"); return; } if(typeof inclusive==="undefined"){ inclusive=true; }else{ inclusive=!!inclusive; } if(inclusive){ if(Math.random()>0.5){ return min+(max-min)*Math.random(); }else{ return max-(max-min)*Math.random(); } }else{ //不闭合区间,先排除0的可能 var randomNum=Math.random(); while(randomNum===0){ randomNum=Math.random(); } return min+(max-min)*randomNum; } }; MyMath.min=function(){ if(arguments.length===0){ throw new Error("no parameter"); return; } var minValue; var l=arguments.length; for(var i=0;i<l;i++){ var param=arguments[i]; if(typeof param!=="number"){ throw new Error("parameter error"); return; } if(i===0){ minValue=param; } if(minValue>param){ minValue=param; } } return minValue; }; MyMath.max=function(){ if(arguments.length===0){ throw new Error("no parameter"); return; } var maxValue; var l=arguments.length; for(var i=0;i<l;i++){ var param=arguments[i]; if(typeof param!=="number"){ throw new Error("parameter error"); return; } if(i===0){ maxValue=param; } if(maxValue<param){ maxValue=param; } } return maxValue; };

转载于:https://www.cnblogs.com/hngdlxy143/p/9736620.html

javascript底层练习相关推荐

  1. Javascript底层原理总结

    文档持续更新- 目录 基础 数据结构 JS堆栈的概念 作用域链的理解 变量提升.函数提升.浏览器解析变量的机制 理解上下文和作用域 定义一个变量到这个变量被回收做了什么 进程与线程.什么是单线程?和异 ...

  2. 【探讨】javascript事件机制底层实现原理

    前言 又到了扯淡时间了,我最近在思考javascript事件机制底层的实现,但是暂时没有勇气去看chrome源码,所以今天我来猜测一把 我们今天来猜一猜,探讨探讨,javascript底层事件机制是如 ...

  3. 傻傻分不清的javascript运行机制

    学习到javascript的运行机制时,有几个概念经常出现在各种文章中且容易混淆.Execution Context(执行环境或执行上下文),Context Stack (执行栈),Variable ...

  4. JavaScript中的constructor属性

    对象的属性: JavaScript String对象 1.constructor 2.length 3.目前了解就先不涉及了 length属性很好理解就是字符串的长度,但是constructor就难以 ...

  5. JavaScript深入之变量对象

    JavaScript深入系列第四篇,具体讲解执行上下文中的变量对象与活动对象.全局上下文下的变量对象是什么?函数上下文下的活动对象是如何分析和执行的?还有两个思考题帮你加深印象,快来看看吧! 前言 在 ...

  6. javascript引擎工作原理的初步了解

    From:https://segmentfault.com/a/1190000014242281 Javascript引擎是能运行javascript代码的程序或解释器.做为前端开发人员,了解java ...

  7. 前端学习之JavaScript第二天学习

    ## 顺序结构: ### 从上到下,从左到右## 分支结构: ### 提前定义好多种功能,在符合逻辑的条件下执行响应式的代码 ** if 结构 ** 1. if(表达式) 2. 计算结果是Boolea ...

  8. 前端框架这么火,还有必要学好原生 JavaScript 吗?

    作为一名前端工程师,JavaScript 你一定每天都在用.但是,即便工作 5 年以上的前端也不一定用得非常熟,甚至很多前端对 JavaScript 的掌握程度仅仅停留在会用的层面. 而且 Vue/R ...

  9. JavaScript深入之从原型到原型链

    JavaScript深入系列的第一篇,从原型与原型链开始讲起,如果你想知道构造函数的实例的原型,原型的原型,原型的原型的原型是什么,就来看看这篇文章吧. 构造函数创建对象 我们先使用构造函数创建一个对 ...

最新文章

  1. java在线作业系统_在线作业系统论文
  2. 无需java安装_ubuntu配置java环境-包安装文件无需下载
  3. 想追身边的女孩?哥们我只能帮到你这份上了
  4. React Hooks的使用(一)——useState、useEffect解析
  5. mysql修改密码1820_mysql5.7初始化密码报错ERROR1820(HY000):YoumustresetyourpasswordusingALTERUSERstateme...
  6. Zookeeper 安装部署
  7. 渐进式 Web 应用程序是移动开发的未来吗?
  8. laravel 5连接MySQL_Laravel 手记(连接mysql)
  9. vue : 本地调试跨域问题的解决办法:proxyTable
  10. 点云的密度 曝光时间_200倍的提速!华人博士生提出大场景三维点云语义分割新框架...
  11. 《大象UML》看书笔记2:
  12. jar的MANIFEST.MF配置了Class-Path, java -classpath设置无效
  13. 安全教育平台账号后四位_2020中小学国家安全教育专题活动入口官网:学校安全教育平台...
  14. C语言编程轰炸,C语言实现数字炸弹小游戏
  15. 黑马微信小程序项目实战
  16. 升级mojava之后git失效的问题
  17. 计算机速算训练,世界上最快的速算法,背熟就是速算神童,大脑堪比计算机!仅发一次...
  18. 1分钟让你的App 适配 锤子OneStep
  19. USB OTG(Host) 、 USB ADB(Device)、DWC3 Charge
  20. springboot 全局时间转换器

热门文章

  1. 中国大学MOOC 计算机组成原理第5章 测试(下)
  2. 信息学奥赛一本通(C++)在线评测系统——基础(二)基础算法 —— 1313:【例3.5】位数问题
  3. Netty实战 IM即时通讯系统(三)Netty环境配置
  4. 大数据WEB阶段Spring框架(二)简化配置的操作
  5. 大数据WEB阶段Spring框架(一)IOC控制反转、DI注入依赖
  6. 【机器视觉】 measure_pairs算子
  7. 防止私自接交换机_防止私接家用路由器干扰DHCP功能,禁止用户手动设置IP地址-肖哥...
  8. python 函数前有一个下划线_【Python】怎么写好一个 Python 函数?
  9. ansible(4)——配置文件及以对面某个用户来登录
  10. VMware+Win7+windbg 双机调试