Js的那些事
先说说 var array = new Array(10); 和 var array = Array.apply(null, {length:10});这两个有啥区别,乍一看两个都是生成长度是10的数组,但是仔细研究还是有区别的:
1. var array = new Array(10);
直接在控制台看一目了然,上图:

可以看到array里面是 (10)[empty*10],也就是说new Array(10);只是生成一个长度是10的空数组。
2。var array = Array.apply(null, {length:10});
再看这个控制台结果,继续上图:

Array.apply(null, {length:10});同样生成长度是10的数组,但是每个元素已经赋了值是undefined,这就是两者做大的区别。在此可能会有人想到那为什么new Array(10);不会出错,当我们在JavaScript里面 var 一个变量时(例如:var i;),虽然我们并没有赋值给 i ,但是JavaScript默认把 i 的值设为 undefined 了,所以我们可以直接输出 i 而不报错。
接下来说一下类型转换的两个操作,+和-运算
对于 “+” 如果左操作数或右操作数不是基本数据类型(primitive)时,会对其进行ToPrimitive转换,这样,左操作数和右操作数都是基本数据类型了,但是如果左右两边的数据类型不一致该怎么办呢?这就涉及到一个优先级的问题,低优先级的数据类型会主动转换为和高优先级一样的数据类型,然后再进行相加操作。它们的优先级关系为:string > num > boolean,所以就会存在两种相加操作:字符串拼接和数字相加。例如:
"1" + 1;//"11"
1 + true;// 2
"1" + true// 相当于 “1”+“true”="1true"
对于“-”操作就简单的多了,只是进行数值相减。 对于非数值类型的左右操作数都进行ToNumber,然后再进行数值相减运算。
"1" - 1;//0
"1" - true //0
1 - "true" // 0
this 关键词的使用
//const o = {
// name: "大海",
// Say: function () { return "我叫" + this.name; }
//};
//alert(o.Say()); //我叫大海
//说明:绑定this是有由方法如何被调用所决定的而并不是函数定义所决定的,理解这点非常重要。也就是说这里的this绑定到o上
//并不是因为Say是o的属性,而是因为Say直接由o调用,所以this才绑在了o上。那如果把同一个函数赋值给一个对象又会怎么?例如
//const sp = o.Say;
//alert(sp()); //我叫
//由于调用函数的方式所以js并不知道原始函数是在o中定义的,所以this将会绑上undefined
//const o = {
// name: '大海',
// greetBackwards: function () {
// function getReverseName() {
// let nameBackwards = '';
// nameBackwards = this.name;
// return nameBackwards;
// }
// return '我叫:'+getReverseName();
// },
//};
//alert(o.greetBackwards()); //我叫: 这里为什么不是“我叫:大海”?? 因为调o.greetBackwards()时里面又调了一个
//getReverseName() 所以this绑在greetBackwards上了而不是o,为了解决这种问题常见的方式是把this赋值给一个变量暂存 例如
const o = {
name: '大海',
greetBackwards: function () {
let self = this; //暂存this
function getReverseName() {
let nameBackwards = '';
nameBackwards = self.name; //这里的self绑定的就是o
return nameBackwards;
}
return '我叫:'+getReverseName();
},
};
alert(o.greetBackwards()); //我叫:大海
再看下面例子:
const bruce = {
name:'大海'
};
function Greet()
{
return "我叫" + this.name;
}
alert(Greet()) //我叫
alert(Greet.call(bruce)); //我叫大海 这里对call不做过多解释,上篇文章已说过。可以看到call方法在调用函数时允许给this绑定一个对象
Js的那些事的更多相关文章
- JS闭包那些事
关于闭包,我曾经一直觉得它很讨厌,因为它一直让我很难搞,不过有句话怎么说来着,叫做你越想要一个东西,就要装作看不起它的样子.所以,抱着这个态度,我终于掳获了闭包. 首先来认识一下什么是闭包,闭包,一共 ...
- WK 与 JS 的那些事
苹果在iOS 8中推出了 WKWebView,这是一个高性能的 web 框架,相较于 UIWebView来说,有巨大提升.本文将针对 WKWebView 进行简单介绍,然后介绍下如何和 JS 进行愉快 ...
- js弹窗那些事
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- JS 比较日期相隔都少天&& 比较两个日期大小&&指定日期往前后推指定天数
//这些天常接触到有关于js操作日期事 就小结了一下,希望对你有帮助 function conversionDate(a,b){ var start =a.split('-'); var end = ...
- 一个Java程序猿眼中的前后端分离以及Vue.js入门
松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ...
- [web建站] 极客WEB大前端专家级开发工程师培训视频教程
极客WEB大前端专家级开发工程师培训视频教程 教程下载地址: http://www.fu83.cn/thread-355-1-1.html 课程目录:1.走进前端工程师的世界HTML51.HTML5 ...
- UEditor编辑器并不难
1.背景: 其实学习UEditor本该在这之前就应该学习整合到自己的项目中的了,第一次接触UEditor是在暑假期间,当时做东西在师兄的代码中发现了这东西,心想:卧槽,竟然可以这样整合别 ...
- Salesforce 快速查看被引入Package的组件
在 Salesforce Package 生成一个新版本的时候,由于经常需要去检查有哪些新的组件将要被引入 Package 中,这个在有众多组件的情况下检查起来会有点眼花缭乱,为了方便,就想着用 JS ...
- 别真以为JavaScript中func.call/apply/bind是万能的!
自从学会call/apply/bind这三个方法后我就各种场合各种使用各种得心应手至今还没踩过什么坑,怎么用?说直白点就是我自己的对象没有某个方法但别人有,我就可以通过call/apply/bind去 ...
随机推荐
- MySQL RPM二进制安装
+++++++++++++++++++++++++++++++++++++++++++标题:MySQL RPM二进制安装时间:2019年2月24日内容:MySQL RPM二进制安装重点:MySQL R ...
- RPC----Hadoop核心协议
什么是RPC RPC设计的目的 RPC的作用 远程过程调用(RPC)是一个协议,程序可以使用这个协议请求网络中另一台计算机上某程序的服务而不需要知道网络细节. 必备知识: 网络七层模型 网络四层模型 ...
- Array.prototype.reduce()
reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值. arr.reduce([callback, initialValue]) c ...
- SpringCloud学习笔记:声明式调用Feign(4)
1. Feign简介 Feign采用声明式API接口的风格,将Java HTTP客户端绑定到它的内部. Feign的首要目标是简化Java HTTP客户端调用过程. 2.Feign客户端示例 Feig ...
- Python——Pycharm安装、激活、中文、
1.激活pycharm (1) 修改hosts文件:将 0.0.0.0 account.jetbrains.com 添加到文件最后面 Windows系统hosts文件路径为: c:\win ...
- vue中@contextmenu在pc和mac中的区别
项目中有用到右键菜单,故用了@contextmenu,由于本人是用的PC电脑,所以一切正常, 但是有同事用mac测试了一下,问题随之而来,MAC上右键按下就触发了, PC上面是鼠标抬起才会触发,所以这 ...
- Qt测算程序运行时间
#include <QDebug> #include <QTime> #include <sys/time.h> #include <windows.h> ...
- JS异常
当 JavaScript 引擎执行 JavaScript 代码时,会发生各种错误. 可能是语法错误,通常是程序员造成的编码错误或错别字. 可能是拼写错误或语言中缺少的功能(可能由于浏览器差异). 可能 ...
- 05VueCli
详情请见: https://pizzali.github.io/2018/10/30/VueCli/ Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,Vue CLI 致力于将 Vue ...
- 洛谷 P2257 【YY的GCD】
这道题还是和上一道[ZAP]有那么一点点的相似哈 题目大意 给定N, M,求1<=x<=N, 1<=y<=M且\(gcd(x, y)\)为质数的(x, y)有多少对 如果对莫比 ...