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的过程中可以更得心应手,毕竟,我爱代码. 这篇文章主要记录的内 ...
随机推荐
- Java数组深入
Java数组深入 内存中的数组 前边提到:数组是一种引用类型,数组引用变量只是一个引用,当它指向有效内存的时候才可以通过数组变量来访问数组元素,也就是说数组变量和数组元素在内存中是分开放的. 可以这么 ...
- 2019-11-7:练习上传getshell,通过菜刀连接
一.使用phtstudy搭建环境 1,将emlog源码解压到phpstudy的www目录,复制emlog源码中的src所有文件到需要搭建emlog的目录中,修改emlog配置文件,输入好本机mysql ...
- 新闻实时分析系统 Spark2.X环境准备、编译部署及运行
1.Spark概述 Spark 是一个用来实现快速而通用的集群计算的平台. 在速度方面, Spark 扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理 ...
- ggforce|绘制区域轮廓-区域放大-寻找你的“onepiece”
首发于“生信补给站” https://mp.weixin.qq.com/s/fm69bw-3cww1YEW_kBcTHQ 更多关于R语言,ggplot2绘图,生信分析的内容,关注有惊喜
- 各种优化方法总结比较(sgd/momentum/Nesterov/adagrad/adadelta)
前言 这里讨论的优化问题指的是,给定目标函数f(x),我们需要找到一组参数x,使得f(x)的值最小. 本文以下内容假设读者已经了解机器学习基本知识,和梯度下降的原理. Batch gradient d ...
- Linux上ES单机版安装
设置 IP 地址 vi /etc/sysconfig/network-scripts/ifcfg-ens32 重启网卡 [root@localhost ~] systemctl restart n ...
- 【网络流相关】最大流的Dinic算法实现
Luogu P3376 于\(EK\)算法求最大流时每一次只求一条增广路,时间复杂度会比较高.尽管实际应用中表现比较优秀,但是有一些题目还是无法通过. 那么我们就会使用\(Dinic\)算法实现多路增 ...
- shell一键部署nginx+tomcat
1.首先拉取环境 tomcat需要用到jdk环境 提前准备好nginx源码包,放于指定目录下 vim test.sh #!/bin/bash yum -y install gcc gcc-c++ z ...
- OpenCV图像识别初探-50行代码教机器玩2D游戏【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- 吴裕雄--天生自然python学习笔记:python通过“任务计划程序”实现定时自动下载或更新运行 PM2.5 数据抓取程序数据
在 Windows 任务计划程序中,设置每隔 30 分钟自动抓取 PM2.5 数据,井保存 在 SQLite 数据库中 . import sqlite3,ast,requests,os from bs ...