JavaScript】【Web前端基础】JavaScript复杂数据类型是什么意思

2020-12-17 10:17发布

15条回答
想当熊猫
2楼 · 2020-12-17 14:03

JavaScript分为简单数据类型和复杂数据类型

简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型

1.值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型string,number,boolean,undefined,null

2.引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型通过new关键字创建的对象(系统对象、自定义对象),如Object、Array、Date等

芒果
3楼 · 2020-12-17 16:38

JavaScript复杂数据类型主要有:数组和对象两个。

数组:

指的是一组有顺序的数据。
按理来说:数组的每一个成员可以是任意类型
但是,通常情况下我们只推荐在一个数组中存放同一种数据类型的值。

对象:

于是 JS就定义了一个对象数据结构 允许使用 key: value作为一组键值对

小磊子
4楼 · 2020-12-17 16:55

JavaScript-复杂数据类型
对象
1)首先要定义一个对象
var a = new Object();
2)对象属性的添加
a.xxx = 1;
a.yyy = "abcb";
当然,也可以一次性初始化,变量与值用冒号隔开,变量与变量用逗号隔开,也可以是函数
a = {
    xxx: 123,
    yyy: "abcd",
    fun: function() {
        ...
    }
}

数组
1)定义一个数组(无穷大的容器)
var a = new Array();
2)给数组赋值
a[0] = 0;
a[1] = 1;
...
数组的长度:a.length;

函数
1)定义
function Add(a, b) {
    return a+b;
}
2)引用
用法:
var c = Add(1,2);

注意:参数不用写类型,与c/c++/java的函数(也叫:方法),都不一样的地方;
 

代码如下:

  Document  [removed] var obj = new Object(); obj = {  xxx: 123,  yyy: "abcd",  fun: function() {   console.log("HelloWorld!");  } } obj.xxx = 234; console.log("对象测试:"); console.log("xxx = "+obj.xxx+",yyy="+obj.yyy); obj.fun(); var arrayTest = new Array(); //定义一个数组 arrayTest[0] = 0;  arrayTest[1] = 1; arrayTest[2] = 2; console.log("数组测试,长度为:"+arrayTest.length); for(var i=0; i

 

效果如下:


Sauvignon
5楼 · 2020-12-17 19:19

计算机内存分为栈区和堆区,一般来说,基本数据类型都是直接存储在栈区里的,但是复杂数据类型在栈区里存不下,所以只能存储在堆区,将一个16进制的地址存储在栈区里,这个16进制的地址就指向堆区里的这个复杂数据类型的数据;

是你的小甜心呀
6楼 · 2020-12-17 20:02

在Javascript中一切皆为对象

然后引用类型其实指的是内存中存储的是值的一个地址,而不是这个值的本身。

和它相对应的是值类型,值类型在内存中是直接存储值本身的。比如一段字符串。这这2者最直观的区别可以用代码理解:

let str1 = "abc";let str2 = str1; // 在这里,会给str2分配一段内存空间,把"abc"这个字符串存储起来。str1 = "1234";console.log(str2) //abclet obj1 = {"str":"abc"};let obj2 = obj1; //在这里,会给obj2分配一段内存空间,把{"str":"abc"}这个对象所在的内存地址存储起来obj1.str = "1234";console.log(obj2) //{"str":"1234"}obj1 = {"str":"xyz"};console.log(obj2) // {"str":1234}

看到区别了吗,当修改一个引用类型obj1上的str的值时,因为obj2和obj1引用的是同一地址,所以obj2的str也会跟着改变,当我直接把另一个新的值赋给obj1时,这时obj1和obj2的引用地址不一样了,所以obj2的str不再跟着改变,而值类型不会有这类问题。


小猪仔
7楼 · 2020-12-17 20:05

复杂数据类型

  Array Date object RegExp Sting Number Boolean

  核心:Object function

    typeof返回值为string类型

    String Number Date 首字母大写的都是构造函数


//参数赋值的时候,简单数据类型传数值
//参数赋值的时候,复杂数据类型传地址(修改的同一片内存空间)
//注意:当你向修改成员变量中的简单数据类型时,不要通过参数传递,要在函数中直接修改。


无需指教
8楼 · 2020-12-18 08:36

Js的数据类型可以分为简单数据类型和复杂数据类型

简单数据类型有5种,Number,String,Boolean,undefined,null

1.Number数字类型 ,在控制台显示颜色位蓝色

整数,浮点数,科学计数法

NaN是Number类型,但是NaN != NaN

2.String字符串型 , 控制台显示黑色

<1>.单/双引号包裹,成对出现

<2>.str.length 获取字符串的长度

<3>.转义字符 \’ , \” , \n(换行)

3.Boolean 布尔类型  true/false  控制台位蓝色

  1. Undefined   控制台位灰色

  2. Null  控制台为灰色

数据类型的转换

1.转换为Number

 parseInt()取整,不要小数

parseFloat()取小数,遇到非数字停止

Number()整体判断,有非数字出现,返回NaN

+ (最常用,代表正号)var sum = +prompt(‘请输入数字’);

2.转换为String

String()

str.toString();

拼串  age+””;

3.转换为Boolean

Boolean();

!!num;

转成false的几个特殊值:undefined ,null ,NaN ,0 , “” , false

4.NaN说明:表示一个无法用数字表示的数字

             不等于任何值,包括它自己

                      类型是Number

复杂数据类型: 数组,函数,对象

函数

目的:开发中有很多重复的需求,赋值粘贴会冗余代码

定义:对一段重复代码的封装,一次声明,多次使用

函数的声明和调用:

  1. 声明:  function  函数名() {……}

  2. 调用: 函数名();

函数的参数

  1. 形参:函数声明时,定义在函数名()内的参数,就叫形参

形式参数:没有值和类型(默认),------在调用函数时,通过传递过来的实参值决定,占位置的作用

  1. 实参: 在函数调用时,传递过去的参数,就叫做实参

实际参数,有具体的值和类型

作用:在函数调用时,将值传给形参

注意:简单数据类型传递的是值,复杂数据类型传递的是地址

关于函数参数传递的补充说明:

参数(实参,形参)一一对应

(1).多传

后面的会被忽略,但实际传过去了,存在函数内部内置的arguments数组中

(2)少传

没有接收到的形参就是undefined

 

函数的返回值

如果希望函数的执行有结果,通过return 返回值

return 后面的代码不执行,是函数的结束语句

return 返回岁的值就是这个函数调用的结果

 

函数的三要素:

函数名,函数参数,函数返回值

 

作用域及其变量(变量起作用的区域)

1.全局作用域:script标签内,函数外

全局变量: 在全局作用域声明的变量,可以使用在任何地方

2.局部作用域:函数内的区域(会有多个函数,即多个局部作用域,相互之间没有关系)

       局部变量: 在局部作用域声明的变量,作用于当前函数内

 

隐式全局变量

给一个从未声明过(全局和局部都没有声明)的变量直接赋值,就是隐式全局变量  

   

声明函数的两种表达方式

  1. 函数声明式

function  fn(){……}

书写时可以先调用,后声明

  1. 函数表达式

Var fn= function() {……}

必须先声明,后调用

 

匿名函数

  1. 函数表达式

var fn= function(){…}

  1. 匿名函数自调用

(function() {……})();

可以防止全局变量的污染

预解析

在代码执行时,让函数声明和变量声明提升

  1. 变量,函数同名,函数优先级高,覆盖变量

  2. 变量提升,不赋值

  3. 函数提升,不调用

  4. 同名变量,第一个生效

  5. 同名函数,后面覆盖前面


我是大脸猫
9楼 · 2020-12-18 09:40

Js的数据类型可以分为简单数据类型和复杂数据类型

简单数据类型有5种,Number,String,Boolean,undefined,null

1.Number数字类型 ,在控制台显示颜色位蓝色

整数,浮点数,科学计数法

NaN是Number类型,但是NaN != NaN

2.String字符串型 , 控制台显示黑色

<1>.单/双引号包裹,成对出现

<2>.str.length 获取字符串的长度

<3>.转义字符 \’ , \” , \n(换行)

3.Boolean 布尔类型  true/false  控制台位蓝色

  1. Undefined   控制台位灰色

  2. Null  控制台为灰色

数据类型的转换

1.转换为Number

 parseInt()取整,不要小数

parseFloat()取小数,遇到非数字停止

Number()整体判断,有非数字出现,返回NaN

+ (最常用,代表正号)var sum = +prompt(‘请输入数字’);

2.转换为String

String()

str.toString();

拼串  age+””;

3.转换为Boolean

Boolean();

!!num;

转成false的几个特殊值:undefined ,null ,NaN ,0 , “” , false

4.NaN说明:表示一个无法用数字表示的数字

             不等于任何值,包括它自己

                      类型是Number

复杂数据类型: 数组,函数,对象

函数

目的:开发中有很多重复的需求,赋值粘贴会冗余代码

定义:对一段重复代码的封装,一次声明,多次使用

函数的声明和调用:

  1. 声明:  function  函数名() {……}

  2. 调用: 函数名();

函数的参数

  1. 形参:函数声明时,定义在函数名()内的参数,就叫形参

形式参数:没有值和类型(默认),------在调用函数时,通过传递过来的实参值决定,占位置的作用

  1. 实参: 在函数调用时,传递过去的参数,就叫做实参

实际参数,有具体的值和类型

作用:在函数调用时,将值传给形参

注意:简单数据类型传递的是值,复杂数据类型传递的是地址

关于函数参数传递的补充说明:

参数(实参,形参)一一对应

(1).多传

后面的会被忽略,但实际传过去了,存在函数内部内置的arguments数组中

(2)少传

没有接收到的形参就是undefined

 

函数的返回值

如果希望函数的执行有结果,通过return 返回值

return 后面的代码不执行,是函数的结束语句

return 返回岁的值就是这个函数调用的结果

 

函数的三要素:

函数名,函数参数,函数返回值

 

作用域及其变量(变量起作用的区域)

1.全局作用域:script标签内,函数外

全局变量: 在全局作用域声明的变量,可以使用在任何地方

2.局部作用域:函数内的区域(会有多个函数,即多个局部作用域,相互之间没有关系)

       局部变量: 在局部作用域声明的变量,作用于当前函数内

 

隐式全局变量

给一个从未声明过(全局和局部都没有声明)的变量直接赋值,就是隐式全局变量  

   

声明函数的两种表达方式

  1. 函数声明式

function  fn(){……}

书写时可以先调用,后声明

  1. 函数表达式

Var fn= function() {……}

必须先声明,后调用

 

匿名函数

  1. 函数表达式

var fn= function(){…}

  1. 匿名函数自调用

(function() {……})();

可以防止全局变量的污染

预解析

在代码执行时,让函数声明和变量声明提升

  1. 变量,函数同名,函数优先级高,覆盖变量

  2. 变量提升,不赋值

  3. 函数提升,不调用

  4. 同名变量,第一个生效

  5. 同名函数,后面覆盖前面


相关问题推荐

  • 回答 8

    向一个对象数组里面添加新的属性var arry= [{a:11,b:22,c:33,d:44},{a:11,b:0,c:0,d:44},{a:11,b:22,c:99,d:99}];var arry2=[];arry.map(((item, index)=> {arry2.push(Object.assign({},item,{mess1:item.c,mess2:item.d}))}))cons...

  • 回答 2

    我觉得getTopWindow() 应该是他自己写的函数 mask  应该是getTopWindow()函数中 return 出的一个什么玩意show()  jQuery的显示

  • 回答 9

    如图所示

  • 回答 12

    1、原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为 null 的话,我们就称之为原型链 2、 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链...

  • 回答 6

    使用VS code对JS进行Debug,需要安装一个插件,这个插件是根据你所使用的浏览器来的,不同浏览器对应插件不同,以下是插件对应情况,下载完相应的插件以后还要下载一个live server在浏览器下查看你界面运行效果,记得在到设置里修改下live server的端口号,然...

  • 回答 8
    已采纳

    没有基础,是可以学Java的,在网上也能找到很多免费的视频、学习资料等资源,只不过想要光靠自己摸索学透Java并不容易,最好是找一个比较靠谱的有实训的培训机构。不过,我给你点建议:1.脑子里要有编程思维,2.学习态度要有,3.了解了基本概念后,从图形界面...

  • 回答 7

    假设文本框的id=text1js:document.getElementById(text1).value = 测试;//即可

  • 回答 2

    这两个事件都是在js原生开发时经常会用到的,比如需要对页面dom进行动态处理,这时就需要用到DOMContentLoaded和[removed]事件,大家都知道,就是在dom构建完毕后,才可以对dom元素进行操作,否则会获取不到相应的dom元素,但是DOMContentLoaded和[removed]还...

  • 回答 11

    基本概念CookieCookie 是小甜饼的意思。顾名思义,cookie 确实非常小,它的大小限制为4KB左右。它的主要用途有保存登录信息,比如你登录某个网站市场可以看到记住密码,这通常就是通过在 Cookie 中存入一段辨别用户身份的数据来实现的。localStoragelocalStor...

  • 回答 2

    在vscode 头疼的问题是 用浏览器查看网页!会是以文件夹的方式打开的!  我遇到这个问题 我还重新配置了Apache    ! 但是现在可以解决:使用vscode  ==================== 打开cmd   : 在cmd 控制台中输入  :   1.运行cnpm install live-server...

  • 回答 1

    在进行对象之间的合并的时候,就会使用到extend方法进行合并语法结构:$.extend(true,{},对象1,对象2...)但是这里需要考虑一个问题,如果对象间有相同的属性名,就会涉及到哪一个对象和哪一个对象的值覆盖合并的问题,如果对象中的属性值还是一个对象的话,那...

  • 回答 5
    已采纳

    先说下要实现什么功能,比如:限制图片大小不能超过30K,宽高为121x75上面需求提了,然后我直接把代码给你放出来,可以照着下面代码敲一遍试试就知道怎么限制图片宽高了 $(#picFile4).on(change,function(){ var imgFile = this.files[0]; va...

  • 回答 3

    用python爬取近30天百度指数代码均转载,如下:#1.登录url = ‘http://index.baidu.com/’driver = webdriver.Chrome(executable_path=‘C:/Program Files(x86)/Google/Chrome/Application/chromedriver.exe’)driver.get(url)cookieList = [......

  • 回答 7

    基本类型基本类型分为以下六种:string(字符串)boolean(布尔值)number(数字)symbol(符号)null(空值)undefined(未定义)注意:string 、number 、boolean 和 null  undefined 这五种类型统称为原始类型(Primitive),表示不能再细分下去的基本类...

  • 回答 11

    实体类中添加时间转换注解(注意时区问题)12345/**  * 开始时间  */ @JsonFormat(pattern = yyyy-MM-dd HH:mm:ss, timezone=GMT+8) private Date startTime;

  • 回答 5

    实例中包含加、减、乘、除四种运算,由于先乘和除的优先级别高,所以乘和除将首先被运算,接下来是加和减运算。乘和除优先级相同,所以左边的乘法将被先执行,然后是除法,接下来按从左到右的顺序进行加减运算...

没有解决我的问题,去提问