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实现Huffman编码

    一.问题 利用二叉树的结构对Huffman树进行编码,实现最短编码 二.解决 # 构建节点类 class TreeNode: def __init__(self, data): "" ...

  2. Eclipse集成Git做团队开发:分支管理

    在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...

  3. Mybatis事物浅谈

    本篇文章主要对Mybatis事物进行基础的介绍.先回顾JDBC事物,再了解Mybatis里面的事物应用. 1.JDBC的事务管理回顾 JDBC的事务管理是基于Connection对象实现的: 开启事务 ...

  4. logback配置和使用

    简介 logback是由log4j创始人设计的又一个开源日志组件.当前分成三个模块: logback-core是其它两个模块的基础模块. logback-classic是log4j的一个 改良版本.此 ...

  5. MySQL常用sql语句大全

    创建数据库 1 create database dbname; 删除数据库 1 drop database dbname; 选择数据库 1 use dbname; 创建表 12345678 CREAT ...

  6. .Net Core 遇到 “'windows-1252' is not a supported encoding name.”

    最近用 iTextSharp 拆分 Pdf 文档 加水印的时候遇到错误: 'windows-1252' is not a supported encoding name. For informatio ...

  7. 巧记 In/hasOwnProperty/for…in/for…of/forEach区别

    写在前面 上面提到的这些东西,反复的记忆,反复的忘记.现分享一种巧记方法,有需要,请参考,希望你也过目不忘. 仅提供巧记思路.仅提供巧记思路.仅提供巧记思路. 1. in 用于判断属性是否在对象上(包 ...

  8. echarts的最外层配置项

    每次查echarts的官网上边的配置项不知道分别代表什么,必须点开才知道,所以在这做下Echarts配置项的简单记录 最外层的配置项: title:进行标题与副标题的显示隐藏,位置,字体颜色,字体大小 ...

  9. 聊聊webpack 4

    前言 hello,小伙伴们,本篇仓库出至于我的GitHub仓库 web-study ,如果你觉得对你有帮助的话欢迎star,你们的点赞是我持续更新的动力 web-study webpack 打包工具 ...

  10. JavaScript 流程控制(一)顺序结构与分支结构

    语句:语句可以理解为一个行为,循环语句和判断语句就是典型的语句.一个程序有很多个语句组成,一般情况下分号;分割一个一个的语句:如果省略分号,则由解析器确定语句的结尾(不推荐使用) 一.流程控制 流程控 ...