JS引用数据类型概览(思维导图版)
发布日期:2022-02-22 16:04:46
浏览次数:27
分类:技术文章
本文共 3577 字,大约阅读时间需要 11 分钟。
共勉:也许,你是三分钟热度的浅尝辄止,更多时候,你所谓的天赋在真正的天才面前不值一提。
一、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() 括号里,可以输入任何值,不报错,对结果无影响。
总结
- 对数组插入,删除,排序,原数组会改变
- 开头删除 shift 结尾删除pop 任意位置删除 splice 开头插入:unshift 结尾插入 push 任意位置插入 splice 队列:队尾添加,队头删除 push+shift 实现
- 删除 :返回被移除的数组元素; 添加:返回修改后的数组长度 ; 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()
函数(引用类型都有)有属性和方法.函数名是指向函数对象的指针
- js中没有重载,函数名一致(与形参个数和类型无关),后定义的函数会覆盖前面的函数
- 函数 声明 也能覆盖同名 变量声明,与声明顺序无关。
函数作用域
- 基本类型添加属性 不会报错,返回 undefiend;
- 引用变量的赋值是改变地址
- 将对象作为参数,传递的是对象指向的属性的地址,不是对象本身的地址。对象保存了它所指内存的地址。
- 不声明直接定义的变量会默认为全局变量,函数内可以使用全局变量。
- 只要函数运行完毕,局部变量就会被删除。全局变量会在页面关闭后被删除。
- 内部变量和外部变量是以函数区分 函数内部的function(){ {var a;} } 里定义的变量,在函数内function(){}也可以使用
- ECMAscript 5- 没有块级作用域 ,ES6有块级作用域 let.
- 花括号内部 不是单独的作用域。if语句,for循环 内部定义的变量,外面也能使用。eg:循环变量i
闭包
含义:在外部执行内部函数时,仍能使用外部函数的变量。
原因:函数的作用域链中保存的变量i是同一个变量。 解决:可以创建立即执行函数解决闭包问题,将变量i通过参数传入函数中,而传递参数是按值传递。 应用:将变量私有化。递归
特点:算法简单但是耗费资源
应用:辗转相除,汉诺塔,阶乘。三、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
五、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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年03月29日 22时06分51秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
spring 启动之全过程 源码解析
2019-04-27
Spring AOP 原理
2019-04-27
mysql 分库分表分区 动态扩容 总结
2019-04-27
分布式事务 四种方案
2019-04-27
redis和spring整合
2019-04-27
iis6 和iis7s上整个网站重定向
2019-04-27
iis7 url重写和重定向
2019-04-27
XStream xml与javabean之间的互转
2019-04-27
Kubernetes基础:MacOS上设定Dashboard
2019-04-27
#力扣 MySQL196. 删除重复的电子邮箱 @FDDLC
2019-04-27
Seekbar 属性 记录
2019-04-27
textview设置独特字颜色和背景颜色
2019-04-27
背景+带边框(圆角)的textview怎么设置
2019-04-27
第二技能
2019-04-27
算法的设计
2019-04-27
JAVA Freemarker(9)---常见语法大全
2019-04-27
Java MyBatis(1)--- Generator 详解
2019-04-27
Java MyBatis(2)--- generatorConfig.xml详解与运行
2019-04-27
VueJS(5)---初步练习(5题)
2019-04-27
mysql(3)-- 修改root密码命令小结
2019-04-27