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的扩展内容的更多相关文章

  1. 为什么不能用 JS 获取剪贴板上的内容?

    为什么不能用 JS 获取剪贴板上的内容? 为什么不能用 JS 获取剪贴板上的内容? 发一串口令给朋友朋友复制这串口令,然后访问你的网站你在网站上用 JS 读取朋友剪贴板上的口令根据不同的口令,显示不同 ...

  2. CloudBase CMS + Next.js:轻松构建一个内容丰富的站点

    项目背景 试想一下,如果你现在要为你自己或者你所在的组织创建一个强内容的站点,同时要求好的 SEO(搜素引擎优化),比如博客,你会怎么做呢? 由 vite 或者 create-react-app 等脚 ...

  3. handlebars.js 用 <br>替换掉 内容的换行符

    handlebars.js 用 <br>替换掉 内容的换行符 JS: Handlebars.registerHelper('breaklines', function(text) { te ...

  4. Atitit js版本es5 es6新特性

    Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...

  5. js打印Iframe中的内容,并且不需要预览。

    js打印Iframe中的内容,并且不需要预览 js代码如下: <script type="text/javascript" language="Javascript ...

  6. qrcode.js插件将你的内容转换成二维码格式

    ---qrcode.js插件将你的内容转换成二维码格式--- 我之前一直想知道二维码是怎么生成,所以就了解了一下, 最后还是不知道它的原理, 但是,我知道怎么生成. 现在就让我带你制作一个你喜爱的二维 ...

  7. Js使用word书签填充内容

    Js使用word书签填充内容 1.在模板文件中需要填充的地方插入书签 填充内容为:(|光标所在处) 填写书签名,点击添加完成: 2.使用js打开模板,获取书签位置,填充数据: function pri ...

  8. JS 阻止整个网页的内容被选中

    pretty-girl { -webkit-user-select: none; } 可是!可是!不是每个浏览器都可以不忧桑!!!那就只能请脚本大王出山了. 阻止选中 有时候,我们需要禁止用户选中一些 ...

  9. JQ和Js获取span标签的内容

    JQ和Js获取span标签的内容 html: 1 <span id="content">‘我是span标签的内容’</span> javascript获取: ...

随机推荐

  1. HDU校赛 | 2019 Multi-University Training Contest 6

    2019 Multi-University Training Contest 6 http://acm.hdu.edu.cn/contests/contest_show.php?cid=853 100 ...

  2. Java学习:Map接口

    Map集合 Collection接口: 定义了单列集合规范 Collection<E> 每次存储一个元素 单个元素 Map接口:定义了双列集合的规范 Map<K,V> 每次存储 ...

  3. jspatch功能解析

    一.三个模型: 1.补丁:运行时结构维护模型: 2.通信模型 3.解释模型:运行时 二.js.oc分层解释调用 js模块与oc模块的关系 1.oc调用js的配置信息完成配置: 2.oc运行时重定位到j ...

  4. java中各种常见的异常

    一.各种常见的异常 在上一节中程序如果你注意留意,程序抛出的异常是:java.lang.ArithmeticException.这个异常是在lang包中已经定义的.在lang包中还定义了一些我们非常常 ...

  5. Kafka学习笔记之Kafka日志删出策略

    0x00 概述 kafka将topic分成不同的partitions,每个partition的日志分成不同的segments,最后以segment为单位将陈旧的日志从文件系统删除. 假设kafka的在 ...

  6. RabbitMQ 的消息持久化与 Spring AMQP 的实现剖析

    文章目录 1. 原生的实现方式 2. Spring AMQP 的实现方式   要从奔溃的 RabbitMQ 中恢复的消息,我们需要做消息持久化.如果消息要从 RabbitMQ 奔溃中恢复,那么必须满足 ...

  7. 轨迹条(Trackbar)

    1.创建 createTrackbar(轨迹条名称,窗口名称,滑动条的初始位置,滑动条的最大值,回调函数XXX,不懂) 其中回调函数为 void XXX(滑动条的位置,用户数据)在c++中函数名为指向 ...

  8. .NET Core MD5加密 32位和16位

    public class MD5Help { //此代码示例通过创建哈希字符串适用于任何 MD5 哈希函数 (在任何平台) 上创建 32 个字符的十六进制格式哈希字符串官网案例改编 /// <s ...

  9. Ubuntu系统下容器化部署gitlab

    容器化部署gitlab 获取镜像文件 1. 下载镜像文件 docker pull beginor/gitlab-ce:-ce. 2. 创建GitLab 的配置 (etc) . 日志 (log) .数据 ...

  10. nginx 日志整理 目录区分 日志配置

    Nginx日志对于统计.系统服务排错很有用,但是原始的配置方案,日志很难定位问题.因此设想将nginx日志分类,包括access及error日志.并且按照不同域名及日志进行分类. 配置nginx日志目 ...