js问题记录(一) -- 关于for in, sort(), 及prototype
1、关于for in
for in : 遍历对象中的可枚举的属性
例子1:for in 遍历对象的键为String类型,所以调用时用Object[key]形式,而不用Object.key形式
<script>
var obj = {
name: "zxq",
age: 22,
sex: "男"
}
for (var key in obj) {
console.log(key + ", " + obj[key]); //正确
console.log(key + ", " + obj.key); //错误,找名为key的属性,undefined
console.log(typeof(key)); //string
}
</script>
例子2:for in 只能遍历属性为可枚举的属性,对于数组或字符串中不可枚举的属性或方法而言
<script>
var obj = {
name: "zxq",
age: 22,
sex: "男"
}
obj.say = function() {
console.log('this is say');
}
console.log(Object.getOwnPropertyDescriptor(obj, 'say')); //可枚举{writable: true, enumerable: true, configurable: true, value: ƒ}
Object.defineProperty(obj, 'final', {
value: 'flase',
enumerable: false
}); //设置不可枚举的属性
for (var key in obj) {
console.log(key + ", " + obj[key]);
}
console.log(obj);
</script>
例子2截图:
2、关于sort()
数组的排序方法,默认排序的顺序是根据字符串UniCode码,参数为可选的比较函数
例子1:没有参数时
<script>
var arr = [1, 2, 3, 12];
arr.sort();
console.log(arr); //[1, 12, 2, 3]
arr = [1, 2, 4, [2, 1],
[2, 2],
[3, 1, 2]
];
arr.sort();//会将值转为字符串,根据unicode编码排序
console.log(arr);
</script>
例子1截图:
例子2:有参数时,根据比较函数的返回值来排序,具体排序算法?(先相邻比较,在二分比较)[待学习确定]
<script>
var arr = [1, 2, 12, 5, 4];
arr.sort(function(a, b) {
console.log('a: ' + a + ' , ' + 'b: ' + b);
console.log('a-b = ' + (a - b));
return a - b;
});
console.log(arr);
arr = [1, 2, [3, 4],
[3, 2],
[4, 5, 6], 4
];
arr.sort(function(a, b) {
console.log('a: ' + a + ' , ' + 'b: ' + b);
console.log('a-b = ' + (a - b)); //存在NaN,console.log(Boolean(NaN));//false
return a - b;
})
console.log(arr);
</script>
例子2截图:
3、prototype和_proto_
实例对象的__proto__指向它的原型,原型链概念为按照__proto__一级一级向上查找属性或方法
prototype是构造函数中的一个指针,指向构造函数的原型对象
例子1:实例用__proto__来访问它的原型,构造函数用prototype来访问原型对象
<script>
function Fun(name) {
this.name = name
}
var a = new Fun('a');
var b = new Fun('b');
console.log(a.__proto__.constructor);
console.log(b);
console.log(Fun.prototype == a.__proto__); //true
console.log(Fun.prototype == b.__proto__); //true
</script>
例子2:常用方法,hasOwnProperty:判断对象本身的名称和属性 isPrototypeOf: object1.isPrototypeOf(object2),判断object1是否在object2的原型链上
<script>
class Fun {
constructor(name) {
this.name = name;
}
print() {
console.log('this name is ' + this.name);
}
}
class Son extends Fun {
constructor(name, age) {
super(name);
this.age = age;
}
}
var a = new Fun('zxq');
var b = new Son('zzz', 22);
console.log(a);
console.log(b);
console.log(a.hasOwnProperty('name')); //true
console.log(Fun.isPrototypeOf(Son)); //true
</script>
js问题记录(一) -- 关于for in, sort(), 及prototype的更多相关文章
- js 键盘记录实现(兼容FireFox和IE)(转)
主要分四个部分 第一部分:浏览器的按键事件 第二部分:兼容浏览器 第三部分:代码实现和优化 第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydo ...
- 我的three.js学习记录(二)
通过上一篇文章我的three.js学习记录(一)基本上是入门了three.js,但是这不够3D,这次我希望能把之前做的demo弄出来,然后通过例子来分析操作步骤. 1. 示例 上图是之前做的一个dem ...
- 我的three.js学习记录(三)
此次的亮点不是three.js的3d部分,而是通过调用摄像头然后通过摄像头的图像变化进行简单的判断后进行一些操作.上篇中我通过简单的示例分析来学习three.js,这次是通过上一篇的一些代码来与摄像头 ...
- vue.js学习记录
vue.js学习记录 文章已同步我的github笔记https://github.com/ymblog/blog,欢迎大家加star~~ vue实例 生命周期 beforeCreate:不能访问thi ...
- typeahead.js 使用记录
github地址:https://github.com/twitter/typeahead.js 在aceAdmin界面模板中,有typeahead这一控件,版本号为0.10.2 , 这个版本对 mi ...
- D3.js学习记录【转】【新】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js中的数组对象排序(方法sort()详细介绍)
定义和用法 sort() 方法用于对数组的元素进行排序. 语法 arrayObject.sort(sortby) 参数sortby:可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注意 ...
- 我的three.js学习记录(一)
在之前因为项目需要使用WebGL技术做网页应用,但是苦于自己没有接触,只是使用过OpenGL.然后接触到了thre.js这个第三方库之后我突然心情很愉快,这将节省我很多时间. 过了这个项目之后,就再也 ...
- JS学习记录------JS基本指令
对未来的恐慌,和想成为一名自由开发的梦想.让我觉得应该点亮一个新的技能:WEB前端开发. 重新学习JS以及jQuery,让我在日常code的过程中可以更得心应手,毕竟,我爱代码. 这篇文章主要记录的内 ...
随机推荐
- Redis面试题详解:哨兵+复制+事务+集群+持久化等
Redis主要有哪些功能? 1.哨兵(Sentinel)和复制(Replication) Redis服务器毫无征兆的罢工是个麻烦事,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制. ...
- 《面试官之你说我听》:简明的图解Redis RDB持久化、AOF持久化
欢迎关注文章这一系列,一起学习 <提升能力,涨薪可待篇> <面试知识,工作可待篇> <实战演练,拒绝996篇> 如果此文对你有帮助.喜欢的话,那就点个赞呗,点个关注 ...
- 小白学 Python 爬虫(7):HTTP 基础
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 【笔记】vue+springboot前后端分离实现token登录验证和状态保存的简单实现方案
简单实现 token可用于登录验证和权限管理. 大致步骤分为: 前端登录,post用户名和密码到后端. 后端验证用户名和密码,若通过,生成一个token返回给前端. 前端拿到token用vuex和lo ...
- Spring项目中优雅的异常处理
前言 如今的Java Web项目多是以 MVC 模式构建的,通常我们都是将 Service 层的异常统一的抛出,包括自定义异常和一些意外出现的异常,以便进行事务回滚,而 Service 的调用者 Co ...
- 【Android - 问题解决】之Android Studio在Refreshing Gradle Project卡住的问题
今天把Android Studio从2.2版本升级到了2.3版本,但是再打开以前项目的时候,就卡在 “Refreshing XXX Gradle Project” 这里不动了. 网上搜了一些解决方案, ...
- 【JavaEE】之MyBatis插入数据后获取自增主键
很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: 先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段值,再 ...
- phpStudy搭建PHP服务器
目录 1 下载 2 安装 3 新建站点 4 配置host phpStudy是一个PHP调试环境的程序集成包. 该程序包集成最新的 Apache+Nginx+LightTPD PHP MySQL+php ...
- PAT甲级满分攻略|记一次考试经历
一次考试经历 今天是"大雪",很冷. 来到隔壁的学校考试,记得上一次来河中医是两年前大一刚开学吧,那天晚上印象比较深刻,6个室友骑车到处闲逛.当时还不会Hello world. 很 ...
- Python爬虫从入门到精通——基本库re的使用:正则表达式【华为云技术分享】
置顶:华为云618大促火热进行中,全场1折起,免费抽主机,消费满额送P30 Pro,点此抢购. 正则表达式是处理字符串的强大工具,它有自己特定的语法结构,有了它,实现字符串的检索.替换.匹配验证都不在 ...