JavaScript基础

JavaScript

1.理解语言

<script>
    alert('Hello world!');
</script>

此处的alert意为弹出对话提示框 Hello world!

编程语言和标记语言区别
  • 编程语言有很强的逻辑和行为能力(if else、for、while等主动性语言)
  • 标记语言(html)不用于向计算机发出指令,常用于格式化和链接,标记语言存在是用于读取(被动)
总结
  1. 计算机刻意帮助人类解决某些问题
  2. 编程语言发出指令控制计算机实现这些任务
  3. 编程语言有机器语言、汇编语言和高级语言

2. JavaScript基础

2. 1. JavaScript是什么

JavaScript是一种脚本语言,运行过程中由js解释器逐行解释并执行

JavaScript的作用
  • 表单动态校验(密码强度检测,这也是JS最初的目的)
  • 网页特效
  • 服务端开发(Node.js)
  • 桌面程序(Electron)
  • App(Cordova)
  • 控制硬件——物联网
  • 游戏开发(cocos2d-js)
JavaScript与HTML/CSS语言的关系
HTML/CSS标记语言——描述类语言
  • HTML决定网页结构和内容
  • CSS决定网页呈现给用户的外观
JS脚本语言——编程类语言
  • 实现业务逻辑和页面控制(决定功能)
2. 2. 浏览器执行JS简介
  • 渲染引擎: 用来解析HTML与CSS,俗称内核(谷歌浏览器中的blink)
  • JS引擎: 也称为JS解释器。用来读取网页JavaScript代码,对其处理后运行(chrome浏览器的V8)

注:浏览器本身并不会执行JS代码,而是通过JavaScript引擎执行JS代码,进行逐行解释

2. 3. JS的组成

ECMScript(JavaScript语法)、DOM(页面文档对象模型)、BOM(浏览器对象模型)

2. 4. JS的三种书写方式
1. 行内式JS
<input type="button" value="js脚本" onclick="alert('Hello world!')"/>
  • 可以将单行或少量JS代码写在HTML标签的事件属性(以on开头的属性),如:onclick
  • 注意单双引号的使用:在HTML中我们推荐使用双引号JS中我们推荐使用单引号
  • 可读性差,在html中编写JS大量代码时,不方便阅读
  • 引号易错,引号嵌套匹配时,非常容易混乱
  • 特殊情况使用
2. 内嵌JS
<script>
    alert('Hello world!');
</script>
  • 可以将多行JS代码写到<script>标签中
  • 内嵌JS是学习时常用的方式
3. 外部JS文件
<script src="my.js"></script>
  • 利于HTML页面代码结构化,把大段JS代码独立HTML页面外
  • 引用外部JS文件的script标签中间不可以写代码
  • 适用于JS代码量比较大的情况
2. 5. JavaScript注释
//单行注释
/*多行注释 ctrl+shift+/*/
2. 6. JavaScript输入输出语句
方法说明归属
alert(msg)浏览器弹出警戒框浏览器
console.log(msg)浏览器控制台打印输出信息(直接输入log可简写)浏览器
prompt(info)浏览器弹出输出框,用户可以输入浏览器
2. 7. 变量
1. 变量概念
  • 本质:变量是程序在内存中申请的一块用来存放数据的空间
2. 变量的使用

变量在使用时分为两步:

  • 声明变量

  • 赋值

  • 声明变量
//声明变量
var age;    //声明一个叫做age的变量,此处不赋初值,值为“undefined”
var myname='柯罗伊',address='长空'; //声明多个变量
  • var是一个JS的关键字,同时使计算机自动分配空间

  • age是程序员定义的变量名,用于访问内存所分配的空间

  • 赋值
age = 10;   //将变量赋值为10
age = prompt('请输入您的年龄'); //覆盖变量的原有值,并且接受用户的输入值(即:更新变量)
  • 特殊情况:
情况说明结果
var age;console.log(age);只声明 不赋值undefined
console.log(age);不声明 不赋值 直接使用报错
age=10;console.log(age);不声明 只赋值10

  • 命名规范:
  • 由字母、数字、下划线、美元符号($)组成
  • 严格区分大小写
  • 不以数字开头
  • 不能是操作保留字
  • 变量名必须有意义
  • 遵守驼峰命名法:首字母小写,后单词首字母大写

2. 8. 数据类型
1. 变量的数据类型

JavaScript是一种弱数据类型或者说是动态数据类型,这也就意味着其变量数据类型是不确定的。

var num;    //此处不确定num类型
num=10;     //此处确定num为数字类型
//js 的变量数据类型是在程序运行过程中,根据等号右边值才确定的
2. 数据类型的分类

JS把数据类型分为两类:

  • 简单数据类型(Number,String,Boolean,Undefined,Null)
  • 复杂数据类型(object)

  • 简单数据类型(基本数据类型)
简单数据类型说明默认值
Number数字型,包含整数和浮点数0
Boolean布尔型false
String字符串型“”
Undefined声明变量却不赋值undefined
Null声明变量值为nullnull

  • 1. Number型
  • 声明方式
var num=10; //整型
var Num=21.3    //小数
  • 数字表示
/*1.八进制*/
var num1=07;    //对应十进制中的7
var num2=019;    //对应十进制中的17
var num3=010;    //对应十进制中的8

/*2.十六进制*/
var num=0xA;

/*3.数字型最值*/
console.log(Number.MAX_VALUE);  //最大值*n(n>1)返回值为无穷大
console.log(Number.MIN_VALUE);

/*4.数字特殊值*/
alert(Infinity);    //无穷大
alert(-Infinity);   //无穷小
alert*(NaN);        //非数值
  • 数字语法
isNaN(num);    //用于判断变量num是否为非数字,有返回值(bool)
  • 2. String型
var str='我正在学习';   //单引号和双引号均可

因为HTML标签属性使用双引号,所以JS我们通常使用单引号

转义字符串

一般与C++相同

转义符解释
\n换行
\\反斜杠
\'单引号
\"双引号
\ttab制表
\b空格

  • 字符串使用
//1.使用lenth获取长度
var str='我正在学习';
console.log(str.length);

//2.字符串拼接
var age=19;
console.log('我'+age+'正在' + '学习' + 2021 + true);   //此处显示了js具有隐式转换的功能,且和C++类似的,允许在输出中使用变量改变输出

  • 3. Boolean型
<script>
    console.log(true+1);    //此处代码结果为2,表明优先转换为Number型
</script>

  • 4. Undefined 和 Null
//1. undefined的操作
var variable = undefined;   //未定义值可以直接赋值给予
console.log(undfined+' Marry'); //输出结果被隐式转换做字符串
console.log(undefined+1);   //输出NaN

//2. Null的操作
var space = null;
console.log(space+' Marry');    //此处依旧强制转换字符串
console.log(space+1);   //此处的值为1,可看作拷贝构造

3. 获取变量数据类型
var num=10;
console.log(typeof num);    //获取num变量数据类型

var timer=null;
console.log(typeof timer);  //但此处输出为object,被称作对象

var age=prompt('请输入你的年龄:');
console.log(typeof age);    //此处的输出为string,和python结果类似

4. 数据类型转换
  • 转换为字符串型
方式说明代码
toString()转换字符串var num=1;alert(num.toString());
String()强制转换为字符串var num=1;alert(String(num));
+字符串隐式转换为字符串(加号拼接后都是字符串)var num=1;alert('str:'+num);

  • 转换为数字型
方式说明代码
parseInt(string)将字符串类型转换为整数型paeseInt('78')
parseFloat(string)将字符串类型转换parseFloat('78.21')
Number()将字符串类型强制转换为数值型Number('12')
(- * /)三种运算符隐式转换为数值型‘12’-0

//1. parseInt()函数
console.log(parseInt('3.14'));  //3取整
console.log(parseInt('120px')); //去掉后面的字母转换成整数
console.log(parseInt('rem120px'));  //得到NaN

//2. parseFloat()函数 与上述函数类似

//3. Number()函数
console.log(Number('12'));

//4. 利用算术运算 - * / 隐式转换
console.log('12'-0);
console.log('123'-'120');   //输出为3,说明算术运算是作为数字输出的

  • 转换为布尔型
方式说明代码
Boolean()其他类型转换成布尔值Boolean('true');

  • 代表空、否定值会被转换为false,如:‘’、NaN、nill、undefined
  • 其余值均会转换为true

2. 9. 标识符、关键字、保留字
1. 标识符

标识符:就是指开发人员为变量、属性、函数、参数取的名字
标识符不能是关键字或保留字

2. 关键字

关键字:是指JS本身已经使用了的单词,不能再使用它们充当变量名和方法名
例如:break,case,catch,continue,default,delete,do,else,finally,for,function,if,in,instanceof,new,return,switch,this,throw,try,typeof,var,void,while,with等

3. 保留字

其实质上就是预留的“关键字”,即:未来可能使用的“关键字”
例如:boolean,byte,char,const,debugger,double,enum,export,extends,final,float,goto,implements,import,int,interface,long,mative,package,private,protected,public,short,static,super,synchronized,throws,transient,volatile等

2. 10. JavaScript运算符
1. 运算符

运算符(operator)也称操作符,用于实现赋值、比较和执行算数运算等功能的符号。

JavaScript常用运算符:(此部分与C++类似)

  • 算数运算符

  • 递增、递减运算符

  • 比较运算符

  • 逻辑运算符

  • 赋值运算符

  • 算术运算符

概念:基本运算和数学运算相同

运算符实例
+10+20=30
-10-20=-10
*10*3=30
/10/20=0.5
%10%3=1

注:0.1+0.2结果与python相同,所以可能使用相同运算方法,小数运算有显著误差

表达式与返回值
表达式:由数字、运算符、变量等以能求得数值的有意义排列方法所得的组合
返回值:表达式最终返回的结果

  • 递增、递减运算符

前置运算:在执行前先 加一减一
后置运算:在执行后先 加一减一

  • 比较运算符

概述:此运算基本与C++一致,均返回布尔值

运算符说明
<小于
>大于
>=大于等于
<=小于等于
==判断等于(此处先进行隐式转换,待数据类型相同才判断)
!=不等号
=== !==全等 要求值与数据类型均相同

  • 逻辑运算符

概述:用于多条件的判断(与C++相同)

逻辑运算符说明
&&
`
!

  • 短路运算(逻辑运算)(逻辑运算基础)
    短路运算原理:当有多个表达式(值)时,左边表达式值可确定时,不需再继续运算右式

  • 赋值运算符

概述:赋予变量数据的运算符

赋值运算符说明
=直接赋值
+= -= *= /= %=重新赋值

  • 运算符优先级

优先级顺序:
括号、一元运算符、算术运算符、关系运算符、等号判断运算符、逻辑运算符、赋值运算符、逗号运算符

  • 一元运算符里逻辑非优先级高
  • 逻辑与比逻辑或优先级高

2. 11. JavaScript流程控制

-_-# 很像C++简单记下
流程控制:顺序、分支结构循环结构

顺序流程控制
顺序结构是程序中最简单、最基本流程控制,它没有特定的语法结构,程序会按照代码的先后顺序、依次执行,程序中大多数的代码就是这样执行的。

分支流程控制if语句

分支结构

if语句

//1. if 语法结构,当条件为true时,执行大括号语句
if (){

}

//2. if else语句(双分支语句)
if (){}
else {}

//3. if else if语句(多分支语句)(判断器)
if (){}
else if(){}
···
else {}

三元表达式

//1. 有三元运算符组成的式子
++num   3+5 ? :
//2. 语法结构
条件表达式  ?   表达式1 :   表达式2
//3. 执行思路
//若条件为真,则返回表达式1结果,否则表达式2

switch语句(选择器)

switch(表达式){
    case [值1]:
        [执行语句1];
        break;
    ···
    default:
        [执行语句n];
}

//一般来说,当变量值不为空的时候,我们的[值]必须全等于(值和类型相同)表达式

if语句和switch语句区别
1.多分支时,switch语句选择效率更高,因为if语句是自上而下执行的
~2.分支少时,if else效率会更高~

循环流程控制

//1. for循环
for(变量初始化;条件表达;操作表达){
    //循环命令语句
}

//2. while循环
while(条件表达式){
    //循环命令语句
}

//3. do-while循环
do{
    //循环命令语句
}while(条件表达式)

//4. continue和break
continue;   //跳过本次循环
break;      //退出循环

2. 12. 数组

数组:数组是一组数据的集合,其中各个数据被称为元素,在其中可存放任意类型的元素

1. 数组的创建方式
  • 利用new创建数组
var arr=new Array();    //创建空数组

注:Array()是特定命令

  • 利用数组字面量创建数组
var 数组名=[元素1,元素2,···];

注:数组中可以存在任意类型例如:字符串、数字、布尔值等。

2. 数组中的元素
  • 数组索引(与C++相同)

  • 遍历数组
var array=[1,3,"12"];
//此处使用了 变量.length
for(var i=0;i<=array.length;i++){
    console.log(array[i]);
}

  • 数组中新增元素

1.通过修改length长度扩容

var arr=[2,3,5];
arr.length=5;       //扩容至5,未赋值显示为empty(默认为undefined)

2.修改数组索引新增数组元素

var arr=[2,3,5];
arr[3]=4;

//而且,数组可被整体覆盖
arr="Array";        //这里将数组覆盖作字符串

2. 13. 函数
1. 函数的使用(与C++类似)
  • 声明函数
//1. 函数关键字自定义函数
function 函数名(形参1,形参2,···){
    //命令整体
}

//2. 函数表达式(匿名函数)
var 变量名=function(){
    //命令整体
}

  • 函数调用(与C++相同)

  • 形参和实参的匹配

    1.形参和实参个数一致,输出正常结果
    2.实参个数多于形参,则自动忽略多余实参
    3.实参个数少于形参,使用的形参值可看作undefined

  • 函数返回值
    1.有返回值,结果我们使用return语句返回
    2.return语句,会终止函数运行

注:当我们函数返回值时,return结果为undefined

  • arguments的使用

当我们不确定参数传递个数时,可以使用arguents获取。在JS中,它时函数的内置对象(所有函数均有),arguments存储了传递的所有实参,其实质也是数组。

2. 作用域(与C++类似)

作用域:作用域限制了变量和函数体在某一范围发挥作用,意在提高程序效率、减少命令冲突。

  • 基本分类:
    作用域分类:局部作用域和全局作用域
    变量分类:局部变量和全局变量

注:全局变量较为占用资源,因为其只在关闭浏览器才清除

  • 特殊:JS是没有块级作用域的
    块级作用域相当于C++内的自定义的“{}”

  • 作用域链:
    内部函数可访问外部函数变量,可形成一段继承关系。

2. 14. JavaScript预解析
1. 预解析

JavaScript代码是浏览器中的JavaScript解析器来执行的。JavaScript解析器在运行JavaScript代码时,分两步:预解析和代码执行。

预解析:虽然程序是按顺序执行的,但是函数声明(function)和变量声明(var)会被提升到当前作用域最前面。

  • 变量提升
    此方式只提升变量声明,不提升赋值操作,但匿名函数不能实现此操作。
fun();
var fun=function(){
    //
}

相当于:
var fun;
fun();
fun=function(){
    //
}       //所以无法正常运行

另外,也造成了:
var num=10;
fun();
function fun(){
    console.log(num);
    var num=20;
}       //此代码结果为:undefined

  • 函数提升
    此方式只提升变量至作用域最前,并不直接调用

2. 15. JavaScript对象(与C++面向对象相似)
1. 对象

对象是一组无序的相关属性和方法的集合
对象是由属性方法组成的。

  • 属性:事物的特征
  • 方法:事物的方法

使用原因:使JS中针对特定事物特性描述更清晰

2. 创建对象的三种方式
  • 利用字面量创建对象
var obj0={}; //创建一个空对象

var obj={
    uname:"Ken-ky",
    age:18,
    gender:man,
    text: function(){
        //函数命令
    }
}           
//这里采取的方法类似于python中的    键值对(键:属性名,值:属性)
//但是,调用的方式依旧是 对象名.属性名(方法名(实参)),另一方法为:对象名['属性名']

  • 利用new Object创建对象
var obj=new Object();   //创建一个空的对象
obj.uname="Ken-ky";
obj.age=18;
obj.gender="man";
obj.text=function(){
    //函数命令
}

  • 利用构造函数创建对象(减少创建对象相同的属性重复步骤)
//利用函数的方法,重复这些相同属性代码
//构造函数将对象相似属性和方法抽象后封装

function 构造函数名(实参1,···){
    this.属性名=值;
    this.方法=function(){
        //函数命令
    }
}

var 对象名=new 构造函数名(实参1,···);
//1.构造函数名需要首字母大写
//2.构造函数不需要return语句就可返回对象
//3.实际上,使用console.log(对象);可以直接查询所有属性

3. new关键字

new关键字:

  • new创建对象的过程
    1.new构造函数在内存里创建一个空对象
    2.this指向空对象空间
    3.给空对象添加属性和方法
    4、返回此对象

  • 遍历对象

//for in遍历对象内容
for(变量 in 对象){
    //变量作为属性和方法名(键),对象名[变量] 得到值
}

4. 属性有无的判别
var o={
    age:18
}

if(o['age']){
    console.log('此对象有该属性');
}
else {
    console.log('此对象不具有该属性');
}
2. 16. 内置对象

JavaScript中对象分为自定义对象、内置对象和浏览器对象。

内置对象是JS语言自带的对象,这些对象供开发者使用,并提供了基本而必要的功能(属性和方法)

Math,Date,Array,String等均为内置对象

1. 查询MDN文档

包含了HTML、CSS和万维网及HTML5应用的APL
MDN网址

2. Math对象

Math的属性和方法是静态的(固定的),而且其并不是构造函数,所以不需要使用new

//基本使用
Math.PI
Math.floor()    //向下取整
Math.ceil()     //向上取整
Math.round()    //四舍五入
Math.abs()      //取绝对值,会隐式转换,所以说结果可能是NaN
Math.max()
Math.min()
Math.random()   //返回浮点随机数,值[0,1)

3. 日期对象

日期对象是一个构造函数,只能通过Date构造函数(new)实例化日期对象

//1. 不添加形参
var date=new Date();    //不输入形参就用当前时间创建

//2. 参数常用写法 数字型:2022,8,19  或 字符串型:'2022-8-19 22:50:30'和'2022/8/19'
var date1=new Date(2022,8,19);          //此处使用的月份从0开始,所以显示为9月
var date2=new Date('2022-8-19 22:50:30');

  • 日期格式化
方法名说明代码
getFullYear()获取当年dObj.getFullYear()
getMonth()获取当月(从0至11)dObj.getMonth()
getDate()获取当天日期dObj.getDate()
getDay()获取星期几(从0至6)dObj.getDay()
getHours()获取当前小时dObj.getHours()
getMinutes()获取当前分钟dObj.getMinutes()
getSeconds()获取当前秒数dObj.getSeconds()

function Time(){
    var time=new Date();
    var h=time.getHours();
    var m=time.getMinutes();
    var s=time.getSeconds();
    h=(h>9?h:('0'+h));
    m=(m>9?m:('0'+m));
    s=(s>9?s:('0'+s));
    return (h+':'+m+':'+s);
}

  • 日期总的毫秒形式(时间戳)
    Date对象基于1970年1月1日(世界标准时间)起的毫秒数
//1. 通过valueOf() getTime()
var date=new Date();
console.log(date.valueOf());
console.log(date.getTime());

//2. 简单的复现方式(最常用的方法)
var date1= +new Date();     //+new Date()返回的就是总的毫秒数
console.log(date1);

//3. H5新增方式
console.log(Date.now());

4. 数组对象
  • 数组对象的创建方式(与数组创建相同)
    1.字面量方式
    var arr=[1,2,3];
    
    2.new Array()
    var arr1=new Array(2);      //创建长度为2的空数组
    var arr2=new Array(2,3);    //等价于[2,3]
    

  • 检测是否为数组
    1.instanceof 运算符:它可以用于检测对象是否为数组

    var arr=[];
    console.log(arr instanceof Array);      //返回布尔值,true代表类型相同
    

    2.Array.isArray(参数) (此方法在H5新增需要IE9以上支持)

    var arr=[];
    console.log(Array.isArray(arr));        //此方法同样返回布尔值,且true代表与Array类型相同
    

  • 添加或删除数组元素
方法名说明返回值代码
push(参数1,···)末尾添加一个或多个元素,修改原数组并返回新的长度arr.push('元素1','元素n');
pop()删除数组最后一个元素。数组长度减1,且不需参数。修改原数组返回删除元素的值arr.pop();
unshift(参数1,···)向数组开头添加一个或多个元素,修改原数组返回新的长度arr.unshift('元素1','元素n');
shift()删除数组第一个元素,数组长度减1,不需参数,修改原数组返回第一个元素值arr.shift();

  • 数组排序
方法名说明
reverse()颠倒数组中元素的顺序,无参数,改变原数组
sort()对数组元素进行排序,改变原有数组

  • 数组索引方法
方法名说明返回值
indexOf()数组中查找给定元素的第一个索引如果存在,则返回索引号;不存在,则返回-1
lastIndexOf()在数组中的最后一个索引如果存在,则返回索引号;不存在,则返回-1

//返回数组元素索引号方法(只返回第一个满足条件值,从前往后)
var arr=['red','green','blue','pink'];
console.log(arr.indexOf('blue'));

//从后往前查找
console.log(arr.lastIndexOf('biue'));

  • 数组转换字符串
方法名说明返回值
toString()把数组转换成字符串,逗号分隔每一项返回一个字符串
join(‘分隔符’)方法用于把数组所有元素转换为一个字符串返回一个字符串

//1. toString()使用
var arr=[1,2,3];
console.log(arr.toString());

//2. join('分隔符')
var arr=[1,2,3];
console.log(arr.join(','));     //此处使用了逗号(实际上可以选用其他字符)

  • 其他重要方法
方法名说明返回值
concat()连接两个或多个数组,不影响原数组返回一个新的数组
slice()数组截取slice(begin,end)返回被截取的新数组
splice()数组删除splice(begin,num)返回被删后的数组,会影响新的数组

5. 字符串对象(有相关算法)

概述:一般来说,只有复杂数据类型才会有属性和方法,但是字符串拥有很多属性,而这一特殊情况被称作基本包装类型。

  • 基本包装类型
    三个特殊的引用类型:String、Number和Boolean
//系统转换简单类型至复杂包装类型过程:
//1. 把简单数据类型包装为复杂数据类型
var temp=new String('Andy');

//2. 把临时变量的值 给str
str=temp;

//3. 销毁临时变量
temp=null;

  • 字符串的不可变
    指的是里面的值不可变,虽然看上去可以改变内容,但实际上是地址改变了,内存中重新开辟新空间。(原地址的值不变)
    这也就决定了字符串本身不可变,操作完成后,返回新的字符串

  • 根据字符返回位置

方法名说明返回值
indexOf()数组中查找给定元素的第一个索引如果存在,则返回索引号;不存在,则返回-1
lastIndexOf()在数组中的最后一个索引如果存在,则返回索引号;不存在,则返回-1

//字符串对象里  根据字符返回位置    str.indexOf('要查找的字符',[起始位置])
var str='I have a dream!';
console.log(str.indexOf('a',3));    //从索引号为3位置开始向后查找

  • 根据位置返回字符(重点)
方法名说明使用
charAt(index)返回指定位置的字符(index字符串的索引号)str.charAt(0)
charCodeAt(index)获取指定位置处的字符ASCII码(index索引号)str.charCodeAt(0)
str[index]获取指定位置处的字符HTML5、IE8+支持和charAt()等效

//1. charAt(index) 返回对应位置字符
var str='andy';
for(var i=0;i<str.length;i++){
    console.log(charAt(i));
}
//遍历字符串

//2. charCodeAt(index) 返回对应位置字符ASCII码
var str='andy';
console.log(charCodeAt(3));

  • 字符串操作方法(重点)
方法名说明
concat(str1,str2,···)相当于“+”连接字符串
substr(start,length)从start位置开始(索引号),length取的个数
slice(start,end)从start位置开始,截取到end位置,end处不取
substring(start,end)从start位置开始,截取到end位置,end不取,但不接受负值
replace(‘old’,‘new’)将字符串某个字符替换为新字符(只替换第一个)
splite(‘分隔符’)将字符串转换成数组
toUpperCase()转换大写
toLowerCase()转换小写

简单数据类型和复杂数据类型
1. 数据类型和内存分配
  • 简单类型和复杂类型
    简单类型又叫基本数据类型或者值类型,在存储时变量中存储的是值本身 string,number,boolean,undefined,null
    复杂类型又叫做引用类型,在存储时变量存储的只是地址(引用) 通过new创建对象(系统对象、自定义对象):Object,Array,Date等

  • 堆和栈
    分配区别:
    栈(操作系统):由操作系统自动分配释放存放函数参数值、局部变量的值等,其操作方式类似数据结构的栈 简单数据类型存放到栈中
    堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由系统·自动释放 复杂数据存放到堆中
    注:数组是由栈寻址到堆处对应

2. 参数传递(相当于指针和普通变量)
  • 简单类型传参
    函数的形参作为单独的一个变量,其在传递过程中,重新复制了值,所以方法内值的改变,不会影响方法外部值

  • 复杂类型传参
    函数的形参传递了地址,因此方法内改变,其实会影响方法外值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值