为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript深入浅出

Bosn 资深架构师
难度中级
时长 5小时28分
学习人数
综合评分9.60
492人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.5 逻辑清晰
高级程序设计是什么课程?
下面的例子机智的使用了数组的sort()方法,使用靠谱的Object.prototype.toString.apply()方法取得类型后放进数组里,再把数组通过sort()排序后转为字符串比对,太机智...
参考了[萌萌小咔]大神的代码,贴一个极简的:

function arraysSimilar(arr1, arr2){
if(!Array.isArray(arr1) || !Array.isArray(arr2) ||arr1.length!=arr2.length){return false;}
var types1=[],types2=[];
for(var i in arr1){
types1.push(arr1[i]===null?'[object Null]':Object.prototype.toString.apply(arr1[i]));
types2.push(arr2[i]===null?'[object Null]':Object.prototype.toString.apply(arr2[i]));
}
return types1.sort().toString()==types2.sort().toString();
}
有些绕,说说我的思路:
1.首先你要判断一下大前提 即这两个参数arr1和arr2是否都是数组,如果不是请返回false;
2.其次你要判断一下 这两个数组是否长度完全一致,如果不是请返回false;
3.OK,需求给出的是两个数组的元素的位置可以不一样,但元素类型的数量必须一致,那么你应该对比两个数组所含的元素数量是否一致,若一致返回true,否则返回false;
4.说了半天才说到重点,上面的都是坑,现在才开始正题的类型判断js的数组可以支持[键-值]对的存储利用这个特性,我们可以把类型的字符串做键,然后用数字做值,来计算一个数组里都有哪些类型的元素,每个类型有几个
5.那么前提就是,你得先有一个判断类型的方法,如果这个方法你不会写,那你还是回去看本章视频吧...这才是本章真正内容

6.写好判断类型方法后,使用循环便利这两个数组,并将判断类型方法返回的字符串做键,值用来计数(需要新建两个数组分别用来存储arr1和arr2所含的类型数量,类型做键,数量做值)

7.新建一个含全部类型的字符串数组,便利该数组取出每一个键来对比arr1和arr2的类型值是否相等,只要有一个不相等就返回false,如果都想等则返回true
貌似是柯里化,不是科里化

已采纳回答 / xu_0019
立即执行函数.~function(){console.info(1)}()!function(){console.info(2)}()(function(){console.info(3)})()三种方式都一样.

最新回答 / yinyun
第一个只是将new Person()这个实例化对象赋值给Student对象的prototype属性;第二个是将Student.prototype对象的原型指向Person.prototype
感谢老师!讲的超赞!

最新回答 / 飞过那座山
instanceof有个特点就是可以判断对象的原型是否指向函数的prototype属性。new Object()的原型指向Object的prototype,而Array的原型指向的是Object的prototype属性。
个人感觉oop这块讲的没有高级程序设计第六章讲的好,但相互印证加深理解还是很不错的
prototype属性就相当于一个指向构造器函数原型对象的指针啦,不看高程还真理解不了
两个月前看不懂,这次重新过来看终于有所收获了╭(╯ε╰)╮
课程须知
1.您至少学习了本站“JS入门”、“JS进阶”两门基础课程。 2.如您具备一定实践经验对学习有很大帮助。 3.如您没有脚本编程开发经验,学习过程有可能会受挫部分内容或示例代码,请“暂时略过不懂的部分,后面章节会阐述”,当然想透彻学习,还需大量实践来体会知识的内涵。
老师告诉你能学到什么?
结合实例,深入解析以下知识内容: 1. 数据类型、表达式和运算符、语句; 2. 对象、数组、变量、函数; 3. this、闭包和作用域; 4. OOP; 5. 正则与模式匹配。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消