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. Python做一个计时器的动画

    一.问题在做连连看的时候需要加一个计时器的动画,这样就完成了计时功能的设计. 二.解决主要思路: 1.先产生一个画布,用深颜色填充满. 2.产生一个新的矩阵用来覆盖画布,背景用白色,就可以渲染出来递减 ...

  2. SQL系列(一)—— SQL简介

    在说到SQL之前需要了解一些关于数据库的概念: 数据库(database):是一个以某种有组织的方式存储的数据集合.存储数据的仓库,不过是以一定的组织方式进行存储. DBMS:数据库管理系统.经常遇到 ...

  3. 在ZYNQ上裸机跑ARM程序的演示

    今天给大家演示如何在ZYNQ上,裸机跑ARM程序,本测试用的是米尔Z-turn Board单板,测试代码用的XILINX官方的C语言测试程序,用于测试挂接在ARM总线上的设备是否正常,并在串口终端打印 ...

  4. 【转载】C#中AddRange方法往ArrayList集合末尾添加另一个集合

    ArrayList集合是C#中的一个非泛型的集合类,是弱数据类型的集合类,可以使用ArrayList集合变量来存储集合元素信息,任何数据类型的变量都可加入到同一个ArrayList集合中,如果需要往一 ...

  5. android shap画圆(空心圆、实心圆)

    实心圆: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android=" ...

  6. 从 Vue 的视角学 React(四)—— 组件传参

    组件化开发的时候,参数传递是非常关键的环节 哪些参数放在组件内部管理,哪些参数由父组件传入,哪些状态需要反馈给父组件,都需要在设计组件的时候想清楚 但实现这些交互的基础,是明白组件之间参数传递的方式, ...

  7. jvm学习笔记之class文件的加载、初始化

    编写的java文件在要真正运行时,会首先被编译成 “.class"结尾的二进制文件,然后被虚拟机加载.那么在虚拟机中一个class文件要成为java实例,需要经历好几个步骤: 1.装载:装载 ...

  8. 网络编程系统化学习(1.1.)--socket基础

    大纲 学完该阶段内容,你将会很好的完成如下的面试题 socket面试试题相关: 1.写一个简单的socket程序,实现客户端发送数据,服务端收到数据后,将该内容转发给客户端 2.简要概述一下socke ...

  9. python绘图 转

    Python有很多可视化工具,本篇只介绍Matplotlib. Matplotlib是一种2D的绘图库,它可以支持硬拷贝和跨系统的交互,它可以在Python脚本.IPython的交互环境下.Web应用 ...

  10. 打造属于你的提供者(Provider = Strategy + Factory Method) 设计模式 - Provider Pattern(提供者模式)

    打造属于你的提供者(Provider = Strategy + Factory Method)   1.1.1 摘要 在日常系统设计中,我们也许听说过提供者模式,甚至几乎每天都在使用它,在.NET F ...