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的过程中可以更得心应手,毕竟,我爱代码. 这篇文章主要记录的内 ...
随机推荐
- 2019-9-25:渗透测试,基础学习,medusa爆破学习
Medusa(美杜莎)暴力破解使用 该文章仅供学习,利用方法来自网络文章,仅供参考 一.简介 medusa(美杜莎)是一个速度快,支持大规模并行,模块化,爆破登陆,可以同时对多个主机,用户或是密码执行 ...
- 手把手教学h5小游戏 - 贪吃蛇
简单的小游戏制作,代码量只有两三百行.游戏可自行扩展延申. 源码已发布至github,喜欢的点个小星星,源码入口:game-snake 游戏已发布,游戏入口:http://snake.game.yan ...
- es6 every的使用
let arr2 =[1,3,5,7,9,10]; //arr2.every() 数组里面所有的元素都有符合条件,才返回true var b =arr2.every(function (val,ind ...
- python排序算法之一:冒泡排序(及其优化)
相信冒泡排序已经被大家所熟知,今天看了一篇文章,大致是说在面试时end在了冒泡排序上,主要原因是不能给出冒泡排序的优化. 所以,今天就写一下python的冒泡排序算法,以及给出一个相应的优化.OK,前 ...
- Docker虚拟化之<基础命令>
1.在docker hub中搜索镜像 docker search nginx 2.从docker镜像服务器拉取指定镜像或者库镜像 docker pull docker.io/nginx 3.列出系统当 ...
- JS获取当前完整的url地址以及参数的方法
javascript 获取当前 URL 参数的两种方法: //返回的是字符串形式的参数,例如:class_id=3&id=2& function getUrlArgStr(){ var ...
- 关于token你需要知道的
第一.token的生成 1)token的生成接口为 https://{你的endpoint} /v3/auth/tokens 比如我是北京一的,我的endpoint就是 iam.cn-north-1. ...
- 最新Navicat Premium12 破解方法,亲测可用
1.下载Navicat Premium 官网https://www.navicat.com.cn/下载最新版本下载安装(文末,网盘地址有64位安装包和注册机下载) 2.激活Navicat Premiu ...
- Ctrl + Shift + F7 ; F3、Shift + F3
pycharm 查找并高亮参数 选中某一参数,Ctrl + Shift + F7 高亮所有该文件中所有该参数 接下来, 按 F3 在所有高亮选择中向下移动一个, Shift + F3 在所有高亮选择 ...
- 时至今日,我们应该承认.Net目前的状况实在堪忧
一: .Net之前 .Net 经历了多年的锤炼,语言特性本身非常优雅和完善,也是非常甜品的一种语言 二: .Net现状 但是与此同时,.Net的生态日益糟糕,困扰着广大.Neter 三: .N ...