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获取: ...
随机推荐
- vue-cli中跨域问题解决方法
webpack提供了配置代理的方法解决跨域 1 在vue-cli项目中打开webpack.dev.cof.js,如下 2 打开conifg目录下的index.js,在 proxyTable中进行配置 ...
- SAP销售订单需求类型的确定优秀级
需求类型的确定优秀级:1.策略组里的需求类型:2.MRP组里的:3.SO行项目类别+MRP类型4.SO行项目类别 部分截图:
- framework7 总结之前遇到的问题和踩过的坑
官网上写的案例比较简单明了,我这里就将我使用时踩过的坑做一个总结,与大家共勉! 最近使用framework,基本全靠浏览官方文档,当然,有遇到了许多的错误,开始不知道哪里出问题也很着急,到最后发现问题 ...
- 记一下python的method resolution order(MRO)机制
一直用python都是拿着cookbook和库的文档直接撸,很少会把细节过得那么彻底,遇到问题才会翻文档. 今天看到这个例子的时候我突然触及了我的盲区,我不确定这样的继承层级调用super.foo() ...
- 从 html 元素继承 box-sizing
在大多数情况下我们在设置元素的 border 和 padding 并不希望改变元素的 width,height值,这个时候我们就可以为该元素设置 box-sizing:border-box;. 我不希 ...
- Java 获取网络重定向URL(302重定向)
方法1: import java.net.HttpURLConnection; import java.net.URL; import org.junit.Assert; import org.jun ...
- Spark基于自定义聚合函数实现【列转行、行转列】
一.分析 Spark提供了非常丰富的算子,可以实现大部分的逻辑处理,例如,要实现行转列,可以用hiveContext中支持的concat_ws(',', collect_set('字段'))实现.但是 ...
- Mac 提示错误”xcrun: error“
错误现象: Mac 安装python模块时出现异常错误 xcrun: error: invalid active developer path (/Library/Developer/CommandL ...
- Linux下源码编译php7
1.安装依赖包 yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng ...
- python之提升程序性能的解决方案
Python在性能方面不卓越,但是使用一些小技巧,可以提高Python程序的性能,避免不必要的资源浪费. 1. 使用局部变量 尽可能使用局部变量替代全局变量,可以是程序易于维护并且有助于提高性能节约成 ...