JS的ES5的扩展内容
JS的ES5
1.严格模式:
(1)什么是严格模式:
在全局或函数的第一条语句定义为: 'use strict'
如果浏览器不支持, 只解析为一条简单的语句, 没有任何副作用
(2)严格模式作用:
必须用var声明变量
禁止自定义的函数中的this指向window
创建eval作用域
对象不能有重名的属性
2.json字符串:
分类:
json对象
json数组
json对象和数组都可以与js的对象和数组相互转换。
注:如果格式不是json的字符串要转为js对象就会出错
转换函数:
1. js --> json : JSON.stringify(obj/arr)
2. json --> js:JSON.parse(json)
var obj = {
name : 'kobe',
age : 39
};
obj = JSON.stringify(obj);
console.log( typeof obj);// string
console.log(obj); //{"name":"kobe","age":39}
obj = JSON.parse(obj);
console.log(obj); //Object
var str = "sdfsd";
str = JSON.parse(str); // 报错 Uncaught SyntaxError: Unexpected token s in JSON at position 0
console.log(str);
3.给Object添加了静态方法
(1) Object.create(prototype, [descriptors])
作用:用一个对象设置另一个对象的原型,并且添加新的属性
var obj = {name : 'curry', age : 29}
var obj1 = {};
//让新的对象obj1的原型设置为obj,并添加新的属性
obj1 = Object.create(obj, {
sex : {
value : '男',
writable : true,
configurable: true,
enumerable: true
}
});
对象obj设置对象obj1.__proto__,并在obj1上添加新的属性sex
obj1:Object
sex: "女"
__proto__: Object
age: 29
name: "curry"
__proto__: Object
......
其中的四个参数为对新添加的属性进行描述
value : 指定值
writable : 标识当前属性值是否是可修改的, 默认为false
configurable: 标识当前属性是否可以被删除 默认为false
enumerable: 标识当前属性是否能用for in 枚举 默认为false
var obj = {name : 'curry', age : 29}
var obj1 = {};
//让新的对象obj1的原型设置为obj,并添加新的属性sex
obj1 = Object.create(obj, {
sex : {
value : '男',
writable : true,
configurable: true,
enumerable: true
}
});
obj1.sex = '女';
console.log(obj1);
/*
Object
sex: "女"
__proto__: Object
age: 29
name: "curry"
__proto__: Object
......
*/
console.log(obj1.age); //
console.log(obj1.sex); //女
delete obj1.sex;
console.log(obj1); //删除了实例对象obj1的属性sex
补:
- for in可以美剧处对象的属性,同时也会枚举出原型上的属性。
- 使用obj1.hasOwnProperty(i)只获取自身属性不枚举原型上属性。必须设置 enumerable: true
- 使用delete obj1.sex删除实例对象自身的属性。必须设置 configurable: true
for(var i in obj1){
if(obj1.hasOwnProperty(i)){
console.log(i); //只打印一个sex
}
}
delete obj1.sex;
console.log(obj1); //删除了实例对象obj1的属性sex
(2) Object.defineProperties(object, descriptors)
作用:为指定对象添加新的属性
//小技巧:防止循环调用set方法,在全局添加变量sex
var sex = '男';
var obj3 = {
name: 'mynameobj3',
age: 22
} Object.defineProperties(obj3, {
sex: {
get: function () {
//console.log("get调用");
return sex;
},
set: function (value) {
//console.log("set调用", value);
//this.sex = value; 不能这么写会造成循环调用
sex = value;
} }
}); console.log(obj3);
/*
Object
age: 22
name: "mynameobj3"
sex: (...)
get sex: ()
set sex: (value)
__proto__: Object
......
*/
obj3.sex = '女';
console.log(obj3.sex); //女
obj3添加了sex属性并可以设置和获得
4.对象本身的两个方法
get propertypeName()
set propertypeName(value)
var sex = 'man'; //利用上一个例子的小技巧
var obj1 = {
name: 'obj1',
age: 22,
sex: 'man',
get sex(){
return sex;
},
set sex(value){
sex = value;
}
} console.log(obj1);
console.log(obj1.sex);
obj1.sex = 'woman';
console.log(obj1.sex);
5.Array的扩展方法
1. Array.prototype.indexOf(value) : 得到值在数组中的第一个下标
2. Array.prototype.lastIndexOf(value) : 得到值在数组中的最后一个下标
3. Array.prototype.forEach(function(item, index){}) : 遍历数组
4. Array.prototype.map(function(item, index){}) : 遍历数组返回一个新的数组,返回加工之后的值
5. Array.prototype.filter(function(item, index){}) : 遍历过滤出一个新的子数组, 返回条件为true的值
var arr = [1, 4, 6, 2, 5, 6];
console.log(arr.indexOf(6));//
//Array.prototype.lastIndexOf(value) : 得到值在数组中的最后一个下标
console.log(arr.lastIndexOf(6));// //Array.prototype.forEach(function(item, index){}) : 遍历数组
arr.forEach(function (item, index) {
console.log(item, index);
}); //Array.prototype.map(function(item, index){}) : 遍历数组返回一个新的数组,返回加工之后的值
var arr1 = arr.map(function (item, index) {
return item + 10
});
console.log(arr, arr1); //Array.prototype.filter(function(item, index){}) : 遍历过滤出一个新的子数组, 返回条件为true的值
var arr2 = arr.filter(function (item, index) {
return item > 4
});
console.log(arr, arr2);
6.修改this的绑定问题
方式:3种
- fun.call(obj,arg1,arg2,...):立即执行
- fun.apply(obj,[arg1,arg2,...]):立即执行
- fun.bind(obj,arg1,arg2,...)():手动加入小括号执行 【适用于回调函数绑定this】
var obj = {
name: "obj"
};
function fun(msg){
console.log(this);
console.log(msg);
}
fun(); //this ==> window
fun.call(obj,"call"); //this ==> obj 立即执行
fun.apply(obj,["apply"]); //this ==> obj 立即执行
fun.bind(obj,"bind")(); //this ==> obj 手动执行
//回调函数只能用bind来绑定this
setTimeout(function(){
console.log(this);
}.bind(obj),1000); //注意是回调函数部分绑定this
JS的ES5的扩展内容的更多相关文章
- 为什么不能用 JS 获取剪贴板上的内容?
为什么不能用 JS 获取剪贴板上的内容? 为什么不能用 JS 获取剪贴板上的内容? 发一串口令给朋友朋友复制这串口令,然后访问你的网站你在网站上用 JS 读取朋友剪贴板上的口令根据不同的口令,显示不同 ...
- CloudBase CMS + Next.js:轻松构建一个内容丰富的站点
项目背景 试想一下,如果你现在要为你自己或者你所在的组织创建一个强内容的站点,同时要求好的 SEO(搜素引擎优化),比如博客,你会怎么做呢? 由 vite 或者 create-react-app 等脚 ...
- handlebars.js 用 <br>替换掉 内容的换行符
handlebars.js 用 <br>替换掉 内容的换行符 JS: Handlebars.registerHelper('breaklines', function(text) { te ...
- Atitit js版本es5 es6新特性
Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...
- js打印Iframe中的内容,并且不需要预览。
js打印Iframe中的内容,并且不需要预览 js代码如下: <script type="text/javascript" language="Javascript ...
- qrcode.js插件将你的内容转换成二维码格式
---qrcode.js插件将你的内容转换成二维码格式--- 我之前一直想知道二维码是怎么生成,所以就了解了一下, 最后还是不知道它的原理, 但是,我知道怎么生成. 现在就让我带你制作一个你喜爱的二维 ...
- Js使用word书签填充内容
Js使用word书签填充内容 1.在模板文件中需要填充的地方插入书签 填充内容为:(|光标所在处) 填写书签名,点击添加完成: 2.使用js打开模板,获取书签位置,填充数据: function pri ...
- JS 阻止整个网页的内容被选中
pretty-girl { -webkit-user-select: none; } 可是!可是!不是每个浏览器都可以不忧桑!!!那就只能请脚本大王出山了. 阻止选中 有时候,我们需要禁止用户选中一些 ...
- JQ和Js获取span标签的内容
JQ和Js获取span标签的内容 html: 1 <span id="content">‘我是span标签的内容’</span> javascript获取: ...
随机推荐
- Win10自动拨号设置
1.右击开始->选择计算机管理 2.任务计划->创建基本任务 别人都是选择计算机启动时,我设置了不行,选择当前用户登录时就可以. 3.在程序或脚本设置下,输入“rasdial 宽带连接 账 ...
- wps金山文档在线编辑--.Net 接入指南
一.申请成为服务商,对金山文档在线服务进行申请 ①进入官网 https://open.wps.cn/ ②申请后如下图,点击右下角的进入服务 ③申请成功后 ④数据回调URL一定是服务器地址,本次我使用的 ...
- N(C)O(S)I(P)P 2019 退役记
N(C)O(S)I(P)P 2019 退役记 day-4 今天下午老师突然咕了,于是一下午欢乐时光 今天上午考试T3线段树维护个区间加,区间乘 一遍过编译,一遍过样例(第一次,俺比较弱(虽然也发现和暴 ...
- 关于银企直连中银行通信类 配置篇 EPIC_PROC
简单介绍:SAP银行企业直连,英文全称:Electronic Payment Integration(For China),简称EPIC,是SAP中国为本地化的需求开发的一款产品,以银企直连为支撑,主 ...
- 使用node写爬虫入门
最近看了node能做爬虫,所以就试了一下,一下是整个过程的记录 1.新建文件夹baidunews 2.在上边新建的文件夹下输入npm init进行初始化 3.初始化完成后下载需要的依赖包 npm in ...
- JavaScript 变量与注释
一.变量 ECMAScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据. 换句话说,每个变量仅仅是一个用于保存值的占位符而已.定义变量时要使用 var 操作符(注意 var 是 ...
- 最常用MySql数据库备份恢复
1.数据备份类型: ·完全备份:故名思议备份整个数据库 ·部分备份:备份一部分数据集 : ·增量备份:自上次备份以来的改变数据的备份: ·差异备份:自上次完全备份后改变数据的备份: 2.数据备份的方式 ...
- C语言 dlopen dlsym
C语言加载动态库 头文件:#include<dlfcn.h> void * dlopen(const char* pathName, int mode); 返回值 handle void ...
- python与设计模式--单例模式
https://zhuanlan.zhihu.com/p/31675841 设计模式分类 创建类 单例模式.工厂模式.抽象工厂模式.原型模式.建造者模式 结构类 装饰器模式.适配器模式.门面模式.组合 ...
- blockingqueue.h
#include <mutex> #include <condition_variable> #include <deque> template <typen ...