JS引用数据类型概览(思维导图版)
发布日期:2022-02-22 16:04:46 浏览次数:27 分类:技术文章

本文共 3577 字,大约阅读时间需要 11 分钟。

共勉:也许,你是三分钟热度的浅尝辄止,更多时候,你所谓的天赋在真正的天才面前不值一提。

引用数据类型

一、Array

Array

  • js数组可以包含不同类型的数据。
  • 数组大小可以动态调整,下标溢出时数组长度自动扩展。
    跳过赋值的时候 ,跳过的下标,值为undefined。
  • 创建数组最好避免以下形式 与 浏览器 和版本 有关
var values=[1,2,];//第三个为空,不能确定是生成两项还是三项	console.log(values.length);//2	var option=[,,,,,];//不能确定生成的是五项还是六项	console.log(option.length);//5
  • push()
colors.push('black','brown'); 	//结果: ["red", "green", "blue", "black","brown"] 	colors.push(['black','brown']); 	//['black','brown']作为一个元素插入。	//结果: ["red", "green", "blue", ["black","brown"]]
  • pop() 括号里,可以输入任何值,不报错,对结果无影响。

总结

  1. 对数组插入,删除,排序,原数组会改变
  2. 开头删除 shift 结尾删除pop 任意位置删除 splice
    开头插入:unshift 结尾插入 push 任意位置插入 splice
    队列:队尾添加,队头删除 push+shift 实现
  3. 删除 :返回被移除的数组元素; 添加:返回修改后的数组长度 ; split:返回删除元素的数组形式

Array.isArray(); 判断是否为数组,是->true;否->false IE9-不支持

一个框架向另一个框架传入数组,传入的数组与原生创建的数组分别具有不同的构造函数.这种情况会造成 instanceof 失效,解决: Array.isArray()方法, 确定是否为数组.

转换函数: toLocalString(),toString()和 valueof()方法

  • 数组中 toString()和toLocaleString()是一样的
  • valueof() 返回数组,和数组本身一样, colors和colors.valueof() 结果一致, 后台会对数组的每一项自动调用toString();
  • toString() 将数组的所有项拼接成一个字符串, 中间逗号隔开。返回值类型string
  • valueof() 返回值类型 数组类型

二、Function

函数实际上是对象,每个函数都是function类型的实例 new Function()

函数(引用类型都有)有属性和方法.函数名是指向函数对象的指针

Function

  • js中没有重载,函数名一致(与形参个数和类型无关),后定义的函数会覆盖前面的函数
  • 函数 声明 也能覆盖同名 变量声明,与声明顺序无关。

函数作用域

  • 基本类型添加属性 不会报错,返回 undefiend;
  • 引用变量的赋值是改变地址
  • 将对象作为参数,传递的是对象指向的属性的地址,不是对象本身的地址。对象保存了它所指内存的地址。
  • 不声明直接定义的变量会默认为全局变量,函数内可以使用全局变量。
  • 只要函数运行完毕,局部变量就会被删除。全局变量会在页面关闭后被删除。
  • 内部变量和外部变量是以函数区分 函数内部的function(){ {var a;} } 里定义的变量,在函数内function(){}也可以使用
  • ECMAscript 5- 没有块级作用域 ,ES6有块级作用域 let.
  • 花括号内部 不是单独的作用域。if语句,for循环 内部定义的变量,外面也能使用。eg:循环变量i

闭包

含义:在外部执行内部函数时,仍能使用外部函数的变量。

原因:函数的作用域链中保存的变量i是同一个变量。
解决:可以创建立即执行函数解决闭包问题,将变量i通过参数传入函数中,而传递参数是按值传递。
应用:将变量私有化。

递归

特点:算法简单但是耗费资源

应用:辗转相除,汉诺塔,阶乘。

三、Object

Object

  • 创建对象:new Object() 不传参时,括号可以省略 new Object

  • js对属性名的要求并不严格 特殊字符可+""作为属性名

  • 属性名是字符串类型,会自动将数字转换为字符串

    var person={
    5:true ,//属性名可以为数字,不能用对象.属性的形式访问 5->'5' 'hello world':'你好',// 属性名有空格必须加引号,否则会报错 } console.log(person['5']);//trueconsole.log(person['hello world']);//你好console.log(person[5]);//true js会调用toString(); 将5转换为字符串'5'

对象中可以自定义 toString 和 toLocaleString属性

var person1={
name:'lily', toString:function(){
return 'name为'+this.name; //toString 可以设置打印输出的形式, 常用于添加解释 }, toLocaleString:function(){
return 'this is my tolocalString'; //toLocaleString没有定义,输出时结果和toString()一致 }};//对象中 不添加 toString 和 toLocaleString属性,默认输出 [object Object]console.log(person1.toString());//name为lily console.log(person1.toLocaleString());//this is my tolocalStringconsole.log(person1);//{name: "lily", toString: ƒ, toLocaleString: ƒ}

对象的比较

比较的是引用的比较而不是值的比较

对象和其本身是相等的,和其他任何对象都不相等。
相应位置的数组元素是相等的两个数组也是不相等的。

四、包装类

包装类

  • toPrecision()会根据要处理的数值决定到底是调用 toFixed()还是调用 toExponential()

String

String

五、Date

Date

  • 字符串格式:‘月/日/年’ ‘月(英文) 日,年’ ‘星期 月 日 年 时:分:秒 时区’ ‘yyyy-mm-ddThh:mm:ss:sssZ’
  • 将日期格式的字符串作为参数传入Date()构造函数之后,会自动调用Date.parse()转换为毫秒数。
  • 在构造函数Date()中参数为Date.UTC模式,自动调用Date.UTC(); 返回的是本地时间。

GMT时间(格林尼治标准时间)一般指世界时间, 即0时区的区时,比北京时间(东8区)晚8小时; 所以GMT时间+8小时所得结果就是北京时间。

new Date(Date.parse('2019-12-12'));	//Thu Dec 12 2019 08:00:00 GMT+0800 (中国标准时间)	new Date(Date.parse('2019-12-12T08:12:22'))	//Thu Dec 12 2019 08:12:22 GMT+0800 (中国标准时间)	new Date(Date.parse('2019-12-12T08:12:22Z'));	//Thu Dec 12 2019 16:12:22 GMT+0800 (中国标准时间)		//以 yyyy-mm-dd 作为日期的字符串格式 不设置小时和秒数,	//将作为格林尼治时间默认00:00:00,返回是本地时间 08:00:00	//T时:分:秒  被当做是本地时间   T时:分:秒Z  被当做是GMT时间

设置日期和时间

  • 设置月份时,传入的值超过11,则增加年份 ;
  • setDate();超过该月应有的天数,则增加月份;
  • 设置小时,超过23,增加天数;
  • 设置分钟,超过59,增加小时;
  • 设置秒数,超过59,增加分钟;

六、单体内置对象

单体内置对象

floor()和parseInt() 的区别

floor() 向下取整 ,parseInt()截取整数。

区别 :负数 不同

console.log(Math.floor(-25.1));//-26		console.log(parseInt(-25.1));//-25

愿你不会终日放荡形骸,然后久觉起烦恼!

转载地址:https://blog.csdn.net/Conradine_Lian/article/details/105465775 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:三分钟搞定JS继承
下一篇:jQuery知识点概览(思维导图版)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年03月29日 22时06分51秒