一、JSON.parse()和JSON.stringify()

网络中的信息的传输,传输的都是字符串,XML 用来传输数据,现在大多数web开发都是用json数据结构。

1.前端 ----string—》后端
将对象转为字符串:stringify
2.前端《----string— 后端

1.1 JSON.parse
作用:将字符串转为对象
JSON.parse(str, fn)

str:要解析的json字符串
fn:回调函数,该函数自动执行,可以对要生成的对象进行遍历,如果需要对数据进行操作则使用该方法(一个转换结果的函数, 将为对象的每个成员调用此函数。)
function(key, value) {
key:每次遍历元素的属性名
value:每次遍历元素的属性值
}
执行代码:

         var str = '{"name":"小明","age":18,"sex":"男"}';var toObj = JSON.parse(str);console.log("原来类型:" + typeof str)console.log( toObj );console.log("转换后类型:" + typeof toObj)

结果:

特殊的:如果我们想把属性值里面的数字转换为字符串可用JSON.parse()第二个参数方法:

         var str = '{"name":"小明","age":18,"sex":"男"}';var obj = JSON.parse(str, function(key, value) {// 该种方式会对生成的对象进行遍历,遍历的次数为元素个数 + 1// console.log(this, arguments);// console.log(key, value);if(key) {// 键非空---遍历的过程中return '' + value;//通过} else {// 键为空---遍历的最后一次return value;}});console.log(obj);console.log(typeof obj.age);

结果:

1.2JSON.stringify
作用:将对象转换为字符串
JSON.stringify(obj, fn)
str:要解析的json字符串
fn:回调函数,该函数自动执行,可以对要生成的对象进行遍历,如果需要对数据进行操作则使用该方法(一个转换结果的函数, 将为对象的每个成员调用此函数。)
function(key, value) {
key:每次遍历元素的属性名
value:每次遍历元素的属性值
}
遍历过程和JSON.parse一样的,先遍历每一个元素,遍历的时候是有前提的,每一次都要求有返回值,如果没有返回值,则遍历立即结束返回值作为对象当次遍历元素的值,最后一次,键为空,值为要返回的对象
执行代码:

         var obj = {name: 'zhanglei',age: '18',sex: '男'}var str1 = JSON.stringify(obj);console.log("原来类型:" + typeof obj);console.log(str1);console.log("转换后类型:" + typeof str1);


特殊的:如果我们想把属性值里面的数字转换为字符串可用JSON.stringify第二个参数方法:
执行代码:

var obj = {a: '1',b: '2',c: '3'}var str2 = JSON.stringify(obj, function(key, value) {// 该种方式会对生成的对象进行遍历,遍历的次数为元素个数 + 1// console.log(this, arguments);// console.log(key, value);if (typeof value === "string") {// 键非空---遍历的过程中//console.log(value)return +value;//将所有的字符串转为数字} else {// 键为空---遍历的最后一次//console.log(value)return value;}  }); console.log( str2);

结果:

二、数组
2.1 判断数组和对象四种方式

1判断数组的静态方法:
Arry.isArray(数组名)
2 Instanceof:
数组名 instanceof Array
3 Constructor:
数组名.constructor === Array
4 Object.prototype.toString.call() === ‘[Object Array]’
注意:为什么可以用这个方法?:Object.prototype对象上的toString方法可以用来判断数据类型 判断是否是数组(只有Object.prototype上的toString才能用来进行复杂数据类型的判断),而重写后的toString方法可以把对象转换成字符串,还可以把数值转换成不同进制的数
执行代码:

1    var obj = document.getElementsByTagName('div');
2   var arr = [1, 2, 3];
3   console.log(obj, arr);
4
5   // ES5 isArray 是Array
6   console.log(Array.isArray(obj)); // false
7   console.log(Array.isArray(arr)); // true
8
9   // instanceof
10  console.log(obj instanceof Array); // false
11  console.log(arr instanceof Array); // true
12
13  // constructor
14  console.log(obj.__proto__.constructor === Array); // false
15  console.log(arr.__proto__.constructor === Array); // true
16
17  // toString
18  console.log(Object.prototype.toString.call(obj) === '[object Array]');// false
19  console.log(Object.prototype.toString.call(arr) === '[object Array]');// true

结果:

2.2 获得数组中值的索引
indexOf:正序查找
lastIndexOf:倒叙查找

注意:无论是正序还是倒叙,索引不会改变,只是查找的方向不同,如果数组中有多个要查找的值,则查找到第一个就停止查找。查找不到返回 -1 全等查找
执行代码:

1    var arr = [1, 2, 3, 2, 4];
2   // 获得值的索引
3   // indexOf() 正序查找
4   console.log(arr.indexOf(2)); // 1
5   console.log(arr.indexOf(-2)); // -1
6   // lastIndexOf 倒序查找
7   console.log(arr.lastIndexOf(2)); // 3
8   console.log(arr.lastIndexOf(-2)); // -1

结果:

兼容处理:

1    // 进行能力检测
2   if (!Array.prototype.indexOf) {3       // 该版本的浏览器不支持indexOf
4       Array.prototype.indexOf = function(value) {5           for (var i = 0; i < this.length; i++) {6               if (this[i] === value) {7                   return i;
8               }
9           }
10          // 没有找到
11          return -1;
12      }
13  }
14
15  // 进行能力检测
16  if (!Array.prototype.lastIndexOf) {17      // 该版本的浏览器不支持lastIndexOf
18      Array.prototype.lastIndexOf = function(value) {19          for (var i = this.length -1; i >= 0; i--) {20              if (this[i] === value) {21                  return i;
22              }
23          }
24          // 没有找到
25          return -1;
26      }   }

2.3 forEach
遍历数组
arr.forEach(function(value, index, arr) {
value:遍历元素的值
index:遍历元素的索引
arr:被遍历的数组
})

注意:
1、回调函数内,会忽略return的返回值
2、整体没有返回值
3、原数组没有发生变化
4、返回值是undefined
执行代码:

1    var arr = ['杨浩', '张发', '秋文', '白杰'];
2   var res = arr.forEach(function(value, index, arr) {3       // console.log(arguments);
4       console.log(value, index, arr);
5       return 111; // 会被忽略的
6   });
7   console.log(res);
8   console.log(arr);

结果:

2.4 map
map遍历数组,但是存在映射关系,会产生一个新数组,数组中的元素值为遍历中每一次的返回值。不会改变原数组
var res = arr.map(function(value, index, arr) {
res:最终生成的新的数组
value:元素的值
index:元素的索引
arr:原数组
return:为每一次添加到新生成的数组中的值
});

执行代码:

   var arr = [1, 2, 3, 4];var res = arr.map(function (value, index, arr) {// console.log(arguments);console.log(value, index, arr);return '新生成的' + value;});console.log(res);console.log(arr)

结果:

兼容处理:

1    // 能力检测
2   if (!Array.prototype.map) {3       Array.prototype.map = function(fn) {4           // 声明一个数组
5           var arr = [];
6           for (var i = 0; i < this.length; i++) {7               arr.push(fn(this[i], i, this));
8           }
9           // 返回数组
10          return arr;
11      }12 }

2.5 fill()
给数组填充数据,配合 Array(),即使是函数也不会执行
执行代码:

var arr = new Array(5);console.log(arr);   arr.fill('我是新填充的');console.log(arr);

结果:

2.6 some(断言方法)
var res = arr.some(fn);
fn: function(value, index, arr) {
res:最终生成的新的数组
value:元素的值
index:元素的索引
arr:原数组
}

some用于检测数组中的元素,如果有符合条件的,则整体的值为true,后续代码不执行。如果一个符合条件的都没有,则最终结果为false
执行代码;

var arr = ['杨浩', '张发', '秋文', '白杰'];var res = arr.some(function (value, index, arr) {// console.log(arguments);console.log(value, index, arr);if (value === '秋文') {return true;}});console.log(res);

结果:

2.7 every
和some很类似,只不过every要求所有的元素都符合条件,否则就返回false
执行代码:

var arr = [1,2,3,4];var res1 = arr.every(function(value, index, arr) {// console.log(arguments);console.log(value, index, arr);if (value[0] == '1') {return true;}});console.log(res1);

结果:

总结:
some:类似于逻辑或,一真则真
every:类似于逻辑与,一假则假

兼容处理:

1    // 能力检测
2   if (!Array.prototype.some) {3       Array.prototype.some = function(fn) {4           // 循环
5           for (var i = 0; i < this.length; i++) {6               if (fn(this[i], i, this)) {7                   return true;
8               }
9           }
10      }
11  }
12  // 能力检测
13  if (!Array.prototype.every) {14      Array.prototype.every = function(fn) {15          // 循环
16          for (var i = 0; i < this.length; i++) {17              if (!fn(this[i], i, this)) {18                  return false;
19              }
20          }
21      }}

2.8 filter
过滤数组:返回值就是满足过滤条件组成的新数组
var res = arr.filter(function(value, index, arr) {
// console.log(arguments);
if (value % 2 == 1) {
return true;
}
});

执行代码:

 var arr = [1, 2, 3, 4, 5];var res = arr.filter(function (value, index, arr) {// console.log(arguments);if (value % 2 == 1) {//判断数组中满足余数为2的数return true;}});console.log(res);//返回1,2,3

结果:

兼容写法:

1    // 能力检测
2   if (!Array.prototype.filter) {3       Array.prototype.filter = function(fn) {4           // 定义一个新数组
5           var arr = [];
6           for (var i = 0; i < this.length; i++) {7               if (fn(this[i], i, this)) {8                   arr.push(this[i]);
9               }
10          }
11          // 返回数组
12          return arr;
13      }   }

2.9 reduce和reduceRight(累加方法)
reduce是从前往后累加,reduceRight是从后往前累加
reduce:从第二个成员开始遍历,第一个成员会在第一次遍历的时候作为第一个参数传递
reduceRight:从倒数第二个成员开始遍历,倒数第一个成员会在第一次遍历的时候作为第一个参数传递
reduce:fn 回调函数,
数组的遍历,遍历的时候从第二个元素开始的
fn:
参数: prev, value, index,arr
prev:第一次为第一个元素的值,之后为上一次回调函数的返回值
value:元素的值
index:元素的索引
arr:数组
reduce返回值:
回调函数最后一次的返回值

执行代码:

var arr = [1, 2, 3, 4, 5, 6, 7];    /*
3       reduce:fn 回调函数
4           数组的遍历,遍历的时候从第二个元素开始的
5       fn:
6           参数: prev, value, index,arr
7           prev:第一次为第一个元素的值,之后为上一次回调函数的返回值
8           value:元素的值
9           index:元素的索引
10          arr:数组
11      返回值:
12          回调函数最后一次的返回值
13  */var res = arr.reduce(function (prev, value, index, arr) {// console.log(arguments);console.log(prev, value, index);// 数组值的累加return prev + value;// return prev * value;// return 111;});console.log(res);console.log(arr);

结果:

reduceRight和reduce一样,只是倒序的过程
兼容写法:

1    if (!Array.prototype.reduce) {2       Array.prototype.reduce = function(fn) {3           var res = this[0];
4           for (var i = 1; i < this.length; i++) {5               res = fn(res, this[i], i, this);
6           }
7           return res;
8       }
9   }
10  if (!Array.prototype.reduceRight) {11      Array.prototype.reduceRight = function(fn) {12          var res = this[this.length - 1];
13          for (var i = this.length - 2; i >= 0; i--) {14              res = fn(res, this[i], i, this);
15          }
16          return res;
17      }   }

2.10 bind
call和apply直接执行,而bind返回一个函数,不会立即执行
执行这个返回函数的时候,如果添加实参,实参会和原来绑定时候传入的参数进行合并,作为所有实参传给函数进行调用

执行代码:

function demo(a, b) {console.log(this, arguments);}/*
5       call和apply直接执行,而bind返回一个函数,不会立即执行
6   *///demo.call(document, 1, 2, 3);//demo.apply(document, [1, 2, 3]);var res = demo.bind(document, 1, 2, 3);//console.log(res);res(4, 5, 6);

结果:

2.11 toJSON
格式化时间
执行代码;

var date = new Date();console.log(date);// toJSON格式化时间console.log(date.toJSON());

结果:

JSON.parse()和JSON.stringify()和数组遍历方法相关推荐

  1. JSON.parse和JSON.stringify 参数详解

    JSON.parse和JSON.stringify这两个浏览器自带(IE6/7除外)的方法平常我们经常用到,但是一般都只是用到了他们的第一个参数,比如字符串转对象:JSON.parse('{}')   ...

  2. 详解JSON.parse 和 JSON.stringify

    文章目录 JSON.parse JSON.parse 语法 reviver 参数 JSON.parse 特性 解析的其他方法 JSON.stringify JSON.stringify 语法 repl ...

  3. php json.parse,JSON.parse()与JSON.stringify()和eval()使用方法详解

    这次给大家带来JSON.parse()与JSON.stringify()和eval()使用方法详解,JSON.parse()与JSON.stringify()和eval()使用的注意事项有哪些,下面就 ...

  4. JSON.parse()、JSON.stringify()和eval()的作用

    浅谈JSON.parse().JSON.stringify()和eval()的作用 相信大家对于JSON应该不陌生,度娘对这个名词的解释大致如下: "JSON(JavaScript Obje ...

  5. js JSON.parse和JSON.stringify

    JSON.parse 将json字符串转换成对象 JSON.parse(text[, reviver]) reviver可选参数 var students = '{"id": 1, ...

  6. JSON.parse()、JSON.stringify、 parseInt()

    1.JSON.parse() JSON.parse()是Javascript中一个常用的 JSON 转换方法,JSON.parse()可以把JSON规则的字符串转换为JSONObject,JSON.p ...

  7. JS/JavaScript中解析JSON --- JSON.parse()、JSON.stringify()以及$.parseJSON()使用详解

    JS/JavaScript中解析JSON --- JSON.parse().JSON.stringify()以及$.parseJSON()使用详解 现在JSON格式在web开发中非常重要,特别是在使用 ...

  8. JSON.parse和JSON.stringify的用法

    平时我们在接收后端返回的json对象通常是一个字符串类型的object,所以一般我们要对这个object进行类型转化后,我们才能使用object里面的数据,而这其中涉及到两个必不可少的方法就是JSON ...

  9. JSON.parse 解析json字符串时,遇换行符报错

    Json字符串转换成Json对象时候,有两种方式: 假设d是json字符串: 1,eval('(' + d + ')'). 2,JSON.parse(d): 但是以上方式有隐患,如果Json字符串有换 ...

  10. php的遍历方法,PHP数组遍历方法总结

    在PHP中数组分为两类: 数字索引数组和关联数组. 其中数字索引数组和C语言中的数组一样,下标是为0,1,2- 而关联数组下标可能是任意类型,与其它语言中的hash,map等结构相似. 下面介绍PHP ...

最新文章

  1. wpf里的menu怎么用_股市里的两市成交量是什么,它反映了什么,我是怎么用它来定投的...
  2. php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)
  3. [Flink]Flink1.3 Stream指南六 事件时间与处理时间
  4. loadrunner 参数化数据更新方式
  5. php querystring使用,node.js中的querystring.parse方法使用说明_node.js
  6. Siri为什么越来越蠢?
  7. 使用遇到的问题_水性漆在使用过程中遇到的问题以及解决方案
  8. 在线类图各种UML图分享
  9. 定点运算之原码一位乘法
  10. 有限元二阶拉格朗日插值函数理论
  11. 面向对象:结构化开发方法和面向对象开发方法
  12. 计算机桌面定制操作,教程方法;12、设置桌面--电脑基础知识电脑技巧-琪琪词资源网...
  13. 晨曦 - 江湖一剑客
  14. 尤大都推荐的组件库是如何开发出来的?
  15. 通证与区块链:前台经济+后台技术
  16. 江苏智慧公厕:让厕所成为城市新名片
  17. 67 step to success
  18. HTML页面刷新方法
  19. 深入实践 Spring Boot PDF 百度云盘下载
  20. 为什么使用 CE + Softmax 作为损失函数

热门文章

  1. 软考高项 - 计算公式汇总整理
  2. 简单整系数滤波器去除心电信号的基线漂移
  3. SQL修改表结构写法
  4. php 子都接受邮件,php iamp 接收邮件,收取邮件,获取邮件列表
  5. 专升本知识库系统思维导图
  6. WirelessCar借助亚马逊云科技的安全服务,实现车端到云端的数据安全
  7. 【JavaWeb】AJAX
  8. RGB和YCbCr颜色空间的转换及优化算法
  9. 【java】查重类的实现
  10. js中事件绑定的几种方式