数组、字符串、对象、类数组、typeof

数组、字符串、对象、类数组、typeof

数组中常用方法

改变原数组 在原数组上操作
.push(num1,num2,num3...)在数组的最后添加数据
.pop( )把数组最后一位剪切
.shift( )把数组的第一个元素从其中删除,并返回第一个元素的值。
.unshift(num1,num2.. )向数组开头添加一个或更多元素,并返回新的长度。
.reverse( )将该数组反序
.splice(从第几位开始,截取多少长度,在切口添加新的数据1,在切口添加新的数据2...)
.sort( )根据asc码排升序,提供函数接口可按需设计排序
sort()里写的函数规则:
1.必须写俩形参;
2.当返回值是负数,前面的数放前面;为正数,前面的数放后面;为0不动

不改变原数组 返回新数组
concat join ---> split toString slice

.concat( )将两个数组拼接

var arr = [1,2,3],
arr1 = [4,5,6];
//因为不改变原数组并且返回新数组所以要拿变量接收
var newArr = arr.concat(arr1) ---> [1,2,3,4,5,6]

.slice(从该位开始截取,截取到该位之前)

//只填一个参数就从该位截取到最后,无参数全部截取
var arr = [1,2,3,4,5,6];
var newArr1 = arr.slice(1,3) ---> [2,3]

.join('写哈用哈链接,不写用逗号,写空串直接连') 返回字符串

var arr = [1,2,3,4,5];
var newArr = arr.join('~'); ---> '1~2~3~4~5'

.split('写哈用哈拆分,且写的是该数组里有的') 返回数组这个其实是字符串上的方法

var str = '1~2~3~4~5';
var arr = str.split('~'); ---> ['1','2','3','4','5']

新增数组方法

迭代(遍历)方法:forEach()map()filter()some()every()

forEach()遍历(循环)数组

//array.forEach(function(当前数组值,当前数组索引,数组对象本身))
var arr = [1,2,3,4,5];
var sum = 0;
arr.forEach(function(value, index, arr) {
    sum += value;
})
console.log(sum);//15

filter()返回一个新数组,新数组中的元素是通过指定方法筛选出来的,主要用于筛选数组

//array.filter(function(数组当前的值, 当前数组索引, 数组对象本身))
var arr = {1,2,3,4,33,44,55};
var newArr = arr.rilter(function(value, index) {
    //return value >= 20;//[33,44,55]
    return value % 2 === 0;//[2,4,44]
})
console.log(newArr);

some() 返回布尔值,检测(查找)数组中有无满足指定条件的元素,有返回true无返回flase 找到第一个满足条件的元素就终止循环输出结果,不再查找

//array.some(function(数组当前的值, 当前数组索引, 数组对象本身))
var arr = [1,2,4,5,7,8, 'red'];
var flag = arr.some(function(value) {
	//return value >= 3;//true
    //return value < 0; //false
    return value == 'red';//true
})
console.log(flag);

MAP 与数组的关系

Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值) 都可以作为一个键或一个值。

一个Map对象在迭代时会根据对象中元素的插入顺序来进行 — 一个 for...of 循环在每次迭代后会返回一个形式为[key,value]的数组。

let kvArray = [["key1", "value1"], ["key2", "value2"]];

// 使用常规的Map构造函数可以将一个二维键值对数组转换成一个Map对象
let myMap = new Map(kvArray);

myMap.get("key1"); // 返回值为 "value1"

// 使用Array.from函数可以将一个Map对象转换成一个二维键值对数组
console.log(Array.from(myMap)); // 输出和kvArray相同的数组

// 更简洁的方法来做如上同样的事情,使用展开运算符
console.log([...myMap]);

// 或者在键或者值的迭代器上使用Array.from,进而得到只含有键或者值的数组
console.log(Array.from(myMap.keys())); // 输出 ["key1", "key2"]

新增字符串方法

trim() 删除字符串两端的空白字符,返回一个新的字符串

str.trim();

var str = '  par  ker  ';
console.log(str);//'  par  ker  '
var newStr = str.trim();
console.log(newStr)//'par  ker'
//实例应用:可以解决input输入框,输入空格判断为有值得情况

新增对象方法

Object.keys()用于获取对象自身所有的属性名

Object.key(obj) 类似于for...in,返回一个由属性名组成的数组

var obj = {
	name: 'parker',
	age: 18,
	id: 1
}
var arr = Object.key(obj);//['name', 'age', 'id']

Object.defineProperty()定义对象中新属性或修改原有属性

Object.defineProperty(目标对象,需定义或修改的属性的名字,目标属性拥有的特性) 以上三个参数都是必填项

Object.defineProperty()第三个参数以对象的形式书写{}

  • value:设置属性的值,默认为undefined
  • writable:定义该值是否可以重写,true | false 默认false
  • enumerable:目标属性是否可以被被枚举(遍历),true | false 默认false
  • configurable:目标属性是否可以被删除或是否可以再次修改特性,true | false 默认false
var obj = {
	name: 'parker',
	age: 18,
	id: 1
}
//第二个参数在原对象中没定义就是添加
Object.defineProperty(obj, 'color', {
	value: 'blue';
    enumerable: true;//该属性可被枚举
})
console.log(obj);

//第二个参数在原对象中定义了就是修改
Object.defineProperty(obj, 'age', {
	value: '20';
})
console.log(obj);

//第三个参数
Object.defineProperty(obj, 'id', {
	writable: false;
})
obj.id = 2;
console.log(obj.id);// 1

类数组

可以利用属性名模拟数组的特性
可以动态的增长length属性
如果强行让类数组调用push方法,则会根据length属性的位置进行属性的扩充

类数组的特性是把对象和数组的属性拼到一起
类数组属性要为索引(数字)属性,必须有length属性,最好加上push

var obj = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    name: 'abc',
    age: 123,
    length: 3,
    push: Array.prototype.push,
    splice: Array.prototype.splice
}

typeof 类型转换

number string boolean object undefined function

显示类型转换

//类型变成number类型,null->0 bool->0/1 undefined->NaN
// 转换不成数字的->NaN
Number(mix)

//识别数字开头的和第一个小数点的数
//parseFloat('123.45.5.1abc') -> 123.45
parseFloat(string)

//转换成整型 parseInt(12.3) -> 12 parseInt('123.5abc') -> 123
//俩参数时,以目标进制为基底转换成10进制的数 parseInt(string,基底)
//基底取值范围2-36,2进制到36进制,前一个参数要符合基底,否则NaN
parseInt(string, radix)

//parseFloat('123.45.5.1abc') -> 123.45
parseFloat(string)

//如果谁想变成字符串,谁就用点调用toString( ) num.toString( )
//undefined和null不能用
//参数是基底,把10进制的数转换成目标基底的数 
//var num = 10; num.toString(8) -> 12
toString(radix)

//把参数变成字符串类型
String(mix)

//把参数转换成bool类型,其它为true
//被认定为false的值:undefined , null , NaN , “” , 0 , false
Boolean()

隐式类型转换

isNaN( ) --> 隐式调用Number( );
++、--、正负号+、- --> 隐式调用Number( );
+ 当加号两边有一个是字符串类型就会调用String( );
-、*、/、%–> 隐式调用Number( );
&& || ! 隐式调用Boolean( );
< > <= >= 数字和字符串比隐式调用Number( );
== !=

没有隐式类型转换
===
!==

实例

数组排序 sort()

var arr = [23,43,55,63,3,2,9];
arr.sort(function(a,b) {
//return a-b; 升序
//return b-a; 降序
}

数组乱序 sort()

var arr = [1,2,3,4,5,6];
arr.sort(function() {
return Math.random( ) - 0.5;
});

数组去重

原型链上编程此方法用到this不能使用箭头函数(该方法this指向调用者)

Array.prototype.unique = function() {
    var temp = {},
        arr = [],
        len = this.length;
    for (var i = 0; i < len; i++) {
        if (!temp[this[i]]) {
            temp[this[i]] = 'abc';
            arr.push(this[i]);
        }
    }
    return arr;
}
var arr = [1,2,2,3,3,3,4];
var newArr = arr.unique();//[1,2,3]

Set()方法去重

Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。

var arr = [1, 2, 3, 4, 4, 4, 4];
//new Set(arr)返回的是对象,使用[]和...扩展运算符转换成数组
var arr1 = [...new Set(arr)];
console.log(arr1);//[1,2,3,4]

封装完整版typeof

typeof([ ]) --- array
typeof({ }) --- object
typeof(function) --- object
typeof(new Number( )) --- number Object
typeof(123) --- number

function type(target) {
    var ret = typeof(target);
    var template = {
        '[object Array]': 'array',
        '[object Object]': 'object',
        '[object Number]': 'number - object',
        '[object Boolean]': 'boolean - object',
        '[object String]': 'string - object'
    }
    if (target === null) {
        return 'null';
    } else if (ret == 'object') {
        var str = Object.prototype.toString.call(target);
        return template[str];
    } else {
        return ret;
    }
}

数组扁平化

将多维数组转化为一维数组

let arr = [
    [1, 2, 3, ],[4, 5, 6],[7, [8, 9, [10, 11, [12]]]]
]

ES6方法

let arr1 = arr.flat(Infinity); // [1,2,3,.....,12]

用转换成字符串的方法

toString方法

arr1 = arr.toString().split(',').map(item = > parseFloat(item));

toString()可以将数组转化成字符串,split()将字符串用分隔成数组,map()把每一项转换成数字

其他

  1. 当且仅当一个未定义的变量放在console.log(typeof(a))中不报错
  2. typeof( )返回值的类型是string
  3. NaN不与自身相等且不与任何值相等
  4. 字符串和字符串比较的是ASC码
  5. arguments实参列表是个类数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值