深入浅出:了解字符串,数组和对象之间的方法和转换

一、字符串概念及常用的API方法:
字符串:凡是用双引号或单引号引起来的字符都叫做字符串
 
1、创建字符串的3种方法;
 
(1)、构造函数----》构造出来一个对象    
var str = new String()
例子:var str = new String("我就是我,不一样的烟火,我看自己上火")
console.log(str)

(2)、关键字

var str = String()
(3).字面量
var str = "";
var str = '';
var str = String("我就是我,不一样的烟火,我看自己上火")
console.log(str)
var str ="我就是我,不一样的烟火,我看自己上火";
console.log(str)
原字符串永远都不会被改变
var str = "你这一辈子有没有为别人拼过命?";
str[0] = "";
console.log(str)

2.字符串常用的API:

(1)、charAt:输入下标返回相对应的值
str.charAt(下标)
var str = "人前一杯酒,各自饮完。人后一片海,独立上岸";
console.log(str.charAt(3))

(2)、indexOf:输入值返回对应的下标 如果没有则返回-1

语法:str.indexOf()
var str = "人前一杯酒,各自饮完。人后一片海,独立上岸";
console.log(str.indexOf(""))

(3)、字符串截取:slice、substring、substr

slice:当输入一个值得时候是截取的起始位置  (算自身)
slice、substring:当输入2个值得时候第一个值代表起始位置(算自身) 第二个值是结束位置(不算自身)
substr:当输入2个值得时候第一个值代表起始位置(算自身) 第二个值代表截取的长度
例:var str = "人前一杯酒,各自饮完,人后一片海,独立上岸";

console.log(str.slice(2,6))
console.log(str.substring(2,6))
console.log(str.substr(2,6))
(4)、去掉前后空格:trim
 例:var str = " 你好 ";
var str1 = "再见"
console.log(str)
console.log(str1)
console.log(str.trim())

(5)、split:将字符串转换为数组

(6)、replace():替换。第一参数是需要替换的字符  第二个参数是替换成的字符,返回值是新的字符串
var str = "人与人之间的安全距离是一百二十二公分,跟你喜欢的人在一起,你会努力去缩短这个距离";
var newStr = str.replace("","");
console.log(str)
console.log(newStr)

(7)、将json字符串转json对象的方法:

例1、var obj =eval('('+ str +')');

例2、var obj = str.parseJSON();//由JSON字符串转换为JSON对象

例3、var obj = JSON.parse(str);//由JSON字符串转换为JSON对象

二、数组常见的例题:

(1).让数组中的元素交换位置(重要)
var arr = [10,20];
var temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
console.log(arr)
(2)、求数组的最大数和最小数(重要)
 var arr = [10,20,30,40,50];
//最大数
function maxNum(arr){
var max = arr[0];
for(var i=0;i<arr.length;i++){
if(max<arr[i]){
max = arr[i];
}
}
return max;
}
console.log(maxNum(arr))

1、数组常见的API:

(1)、push:尾部添加;返回值:是数组的长度(该方法会改变元素数组)
arr.push();
 例:var arr = [10,11,12,13];
var newArr = arr.push(14);
console.log(newArr,arr);
(2)、unshift:头部添加; 返回值:是数组的长度( 该方法会改变元素原数组)
arr.unshift();
 (3)、pop: 尾部删除;返回值:是删除的数字;(该方法会改变元素原数组)
arr.pop();

(4)、shift:头部删除;返回值:是删除的数字;( 该方法会改变元素原数组)

arr.shift();

(5)、sort():排序; 返回值:是排序好的数字;( 该方法会改变元素原数组)

arr.sort();
 如果sort内部传递了参数的话那么就是按照数字的排序进行排序
 如果sort内部没有传递参数的话则按照ASCII进行排序
 var newArr = arr.sort(function(a,b){
 return   a-b;
 });
 var arr = [1,2,3,4,5,6];
  var newArr = arr.sort(function(){
    return Math.random()-0.5;
  });
  console.log(newArr,arr);

(6)、reverse():反转

var arrb = [1,2,3,4,5,6];
 ar newArr = arrb.reverse();
console.log(arrb,newArr) 
2.数组常见的API2:
(1)、concat:数组的拼接;返回值:拼接以后新的数组(原数组不会发生改变)
语法:arr.concat(第二个数组);
例: var arr = [1,2,3];
var arr1 = [4,5,6];
var newArr = arr.concat(arr1);
console.log(newArr,arr,arr1)
(2)、join:将数组转换为字符串;( 原数组不会发生改变)
语法:arr.join("");参数:任意符号  把数组按照什么样子进行转换成字符串
 例:var arr = [10,20,30,40];
var str  = arr.join("/");
console.log(str,arr)
(3)、split:将字符串转换为数组   //字符串的方法
语法:str.split();参数:字符串里面自带的一些符号  或者你想要哪种符号进行分割  但是前提是字符串里面必须有这个符号
 例:var str = "10,20,30,40";
var arr = str.split(",");
var newArr = [];

for(var i=0;i<arr.length;i++){
newArr.push(Number(arr[i]));
}
console.log(newArr)
(4)、toString:将数组转换为字符串;----->自己去查-----
语法:arr.toString();
var arr = [10,20,30,40];
var str  = arr.toString("");
console.log(str,arr)
(5)、eval():传入一个字符串,然后将字符串解析成js代码去执行
(6)、slice:截取;(原数组不会发生改变)
语法:arr.slice()

当传入1个参数的时候这个参数代表截取的起始位置
当传入2个参数的时候第一个参数代表截取的起始位置但是不算自身 第二个参数代表截取结束的位置

 例:var arr = [10,20,30,40,50,60,70,80,90,91,92,93,94];
var newArr = arr.slice(3,7);
console.log(newArr,arr)
(7)、splice():截取;( 原数组会发生改变)
语法:arr.splice();
当传入1个值得时候这个值代表截取的起始位置(不算自身)
当传入2个值得时候第一个值代表截取起始的位置第二个值代表截取的长度
当传入三个值得时候,如果第二个值是0的话代表的插入 第一个值代码插入的位置,第三个值插入的数字
当传入三个值得时候,如果第二个值是非0的数字的数代表替换,第一个值是插入的位置,第三个值是插入的数字,第二个值还代表替换的长度
例:var arr = [10,20,30,40,50,60,70,80,90,91,92,93,94];
      var newArr = arr.splice(3,3,"你好");
      console.log(newArr,arr)

 3.什么是伪数组,如何将伪数组转化为标准数组

这里把符合以下条件的对象称为伪数组:
  1,具有length属性
  2,按索引方式存储数据
  3,不具有数组的push,pop等方法
 伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,不具有数组的push,pop等方法,但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用document.getElementsByTagName, document.childNodes之类 的,它们返回的NodeList对象都属于伪数组。
可以使用以下函数将伪数组转化为真正的Array对象(兼容问题处理)。
function makeArray(c) {
try {
return Array.prototype.slice.call(c);
} catch (e) {
var ret = [], i, len = c.length;
for (i = 0; i < len; i++) {
ret[i] = (c[i]);
}
return ret;
}
}

三、对象:

什么是一个对象?万物皆是对象
对象作用:存储信息、命名空间
    三种方法:
1、构造函数
var obj = new Object();是一个Object
2、关键字
var obj = Object();返回值{}
3、字面量
var obj = {}:返回值{}
var obj = new Object();
var obj1 = Object();
var obj2 = {};
console.log(obj2)
如果一个变量当做属性的话 那么这个属性是只属于这个对象的(婚前是属于大家的  婚后是属于自己的)
//添加数据  属性:key值 ;  属性值:val ;obj.key = val;
var obj = {a:3}//数据的类型是key:val  可以存放多个键值对  每个之间用逗号隔开
obj.name = "唐文";
obj.sex = "不详";
obj.age
//上面这个值永远都是key值
//下面这个值可以是一个变量  如果加""则是属性  不加引号则是变量
var name = "bbbb";
obj[name] = 333;

//删除
delete obj.name

//添加方法
obj.fn = function() {
alert(1)
}
console.log(sex)

JSON对象转字符串 

var last=obj.toJSONString(); //将JSON对象转化为JSON字符
var last=JSON.stringify(obj); //将JSON对象转化为JSON字符

对象常用

1.获取对象key值得常用方法,hasOwnProperty,

var jsonObject1 = {
            "name": "xiaoming",
            "age": 29
        },
        var keys1 = [];
    for (var p1 in jsonObject1) {
        if (jsonObject1.hasOwnProperty(p1))
            keys1.push(p1);
    }
    alert(keys1);

2.如果不使用 hasOwnProperty,给Object 添加自己的属性时,也会输出出来

Object.prototype.test = "I am test";
    var jsonObject = {
            "name": "xiaoming",
            "age": 29
        },
        keys = [];
    for (var p in jsonObject)
        keys.push(p);
    alert(keys);  //name,age, test

 3.ES6获取key:Object.getOwnPropertyNames

var obj={a:1,b:2};
Object.getOwnPropertyNames(obj)

4.获取数组对象的key和值

arr.forEach((v,i)=>{

Object.keys(v).forEach(v=>{

console.log(v)//取到了key

console.log(arr[i][v])//取到了值

})

})

 (2)let keyarr = Object.keys(obj).sort;//es6获取对象的key值

原文地址:https://www.cnblogs.com/yunshangwuyou/p/9277093.html