Javascript声明和使用变量
1.1变量的声明
要在程序中使用变量,就必须从声明变量学起,因为Javascript语法与我们基础的其他程序语言声明变量的方法略有不同,但是Javascript语法的变量应用非常强大,使用也非常简单。
1.1.1声明和命名变量
要使用变量,就必须声明变量,可以使用关键字var来声明,如果不使用var关键字可能会导致程序不易阅读。变量区分大小写。
基本的规则:var 变量名;
(1)声明一个变量名:var firstName;
(2)声明多个变量名,用逗号分隔:var firstName,middleName,lastName;
(3)在声明变量时直接为变量赋值:var firstName = "chengmingxiaowu";
(4)一条语句声明多个变量,同时为这些变量赋值:var firstName="chengming",middleName="xiao",lastName="wu";
1.1.2变量和标识符的命名规范
变量名必须是一个js标识符,遵循以下标准命名规则
(1)第一个字符必须为字母,下划线(_)或者美元符号($);
(2)后面可以跟字母、下划线、美元符号、数字,最好不要包含其他符号。
(3)变量名不能是一个关键字或者逻辑常量。(true,null,false,underfind)
(4)变量名在其作用范围内必须是唯一的。
tip:使用错误的变量名在执行时就会导致错误,但是大多数浏览器不会提示这种语法错误。
1.1.3
数据类型可分为简单数据类型和复杂数据类型
一、简单的
数据类型 | 取值范围 |
Boolean |
true或false。 js也会在适当的时候将值转换为1和0。 |
Number |
双精度浮点型。 两个数字常量: (1)Infinity表示无穷大 (2)NaN表示非数字 |
String |
表示一个字符序列,一般使用双引号或者单引号包围。除了内存限制以外,对其长度没有限制。 |
Underfind |
Underfind数值类型仅有一个值,与类型名相同,注意区分大小写。 当定义了一个变量而未为该变量赋值时,该变量就是underfind. |
Null |
Null数值类型仅有一个值,与类型名相同,注意区分大小写。 当一个用于引用某个对象的变量不再使用时,就可以为该变量赋值为null, 从而该变量就不再引用那个对象了,该变量的值就是空引用。 使用情况: (1)声明变量还没有接收到值; (2)声明变量不再包含值; (3)作为函数的返回值,表明很熟没有可以返回的值; (4)作为函数的一个参数,表明省略了一个参数。 |
二、复杂数据类型
(1)Array数据类型
Array为数组变量,数组可以是连续数字索引的数组也可以是符合数组,并且数组元素的数据类型也可以多种多样。
(2)Object数据类型
Object是属性的集合,属性是用来描述对象特性的。
1.1.4自定义常量和内建常量
常量也是变量,但它是一个用于表示其值永远不会改变的变量。
用户可以使用const关键字自定义常量;开发可以使用con_或者大写所有的常量名来区分常量和变量。(IE中的常量定义不生效,所以不推荐自定义的常量。)
以下是常量表:
常量 | 说明 |
false | 一个表示与true相反的唯一逻辑值,表示逻辑假 |
Infinity | 表示正无穷大 IEEE-754值 |
-Infinity | 表示负无穷大的IEEE-754值 |
NaN | 一个预定义的变量 |
null | 一个可以分配给变量的或由未提供数据的函数返回的特殊值。 |
true | 一个表示与false相反的唯一逻辑值,表示逻辑真 |
undefind |
一个特殊值,通常用于指示变量尚未赋值。 将underfind用于不同的类型转换函数时,结果也不相同: (1)String 返回的是 underfind, 转换为字符串。 (2)Nunber返回的是NaN; (3)Object返回的值为新的Object实例;该实例的属性如果没有初始化,那么其属性值为underfind,而非null, 因为Object并非动态类。 (4)向类型变量赋予值underfind时,改值转换为该数据类型的默认值。 |
Tip:null==underfind是true;null===underfind是false;
1.2在程序中使用变量
1.2.1为变量赋值和更改变量值:
1、为变量值赋值,1.1中已经介绍,注意点:
1)在位现有的变量重新赋值时,无需使用var关键字;
2)不用var关键字申明的隐式变量具有全局作用,是全局变量;
2、变量值包含引号:若在变量值中包含引号(双引号或者单引号),就必须用转义符(\);但是如果二者交替出现,则无需使用‘\’;
如:var myName="my name is \"chengmingxiaowu\",thank you!";
var myName="my name is 'chengmingxiaowu',thank you!";
var myName='my name is "chengmingxiaowu",thank you!';
3、更改变量值:只需为该变量重新赋值即可。
var myName = "chengmingxiaowu";
myName = "xiaowu";
4、数据类型的转换:只需为变量赋一个不同类型的值即可。
5、变量的默认值:如果定义了一个变量,但是没有赋值,则运行环境会为其指定一个默认值,这个默认值为underfind。
1.2.2使用变量和获取变量值
变量的值可以相互传递,也可以作为函数的参数被处理,或者被直接显示在网页上。
1、变量申明的顺序:先申明后使用;不申明就会报错。
2、变量申明的提升:先使用后申明,申明会自动提升到最顶部,但是却不能将赋值语句提到顶部,所以会返回该变量对应数据类型的默认值。(虽合法,但不推荐。)
1.3变量的传值和传址
1.3.1传值变量-按值传递
简单数据类型是按值进行传递的, 这种传递类型被成为传值。当按值传递时,将在计算机内存中分配一块空间并将原复制到其中,是相互独立的实体。
var i=10;
var j=i;
alert(j)//输出15
i=30;
alert(j)//输出15
1.3.2传址变量-按引用传递
复杂数据类型可以包含大量和复杂的信息,所以属于此类型的变量并不包含实际的值,它包含的是对值的引用,这种传递类型称为传址。
(这种引用类似于指向变量名的别名,在一些程序语言中称为指针)
var myArry = ["chengming","xiaowu"];
var newArry = myArry;
alert(newArry[1])//返回xiaowu
myArry[1]="xiaowushi";
alert(newArry[1])//返回xiaowushi
1.4内存使用规则-堆和栈
堆和栈都是运行时内存中分配的一个数据去,因此也被成为堆区和栈区,但二者存储的数据类型和处理速度不同。
(1)堆(heap):用于复杂数据类型的分配空间,例如数组对象,Object对象。它在运行时动态分配内存的,因此存取速度比较慢。
(2)栈(stack):主要存放一些基本类型的变量和对象的引用。优势速度快,数据共享。缺点:栈中数据大小与生存期是确定的,缺乏灵活性。
1.4.1 栈的使用规则:
var a=3 首先会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,没有找到,就将3存放进来,然后指向a,接着处理var b=3,在创建完b的引用变量后,直接查找栈中是否有3这个值,因为存在,所以直接指向b 。这样就出现a和b同时指向3的情况。
此时如果a=4,那么js引擎就会重新搜索栈中是否有4,如果没有,存放起来,并a指向4,如果已经有了,就指向这个地址,因此a值的改变不会影响到b值。
1.4.2堆的使用:
当创建数组时,就会在堆内创建一个数组对象,并且在栈内创建一个对数组的引用。
js堆不需要程序代码来显示的释放,因为堆是由自动的垃圾回收来负责的,各种引擎各不相同,但最基本的原则是,如果占中不存在对堆中某个对象堆的引用,那么就会认为该对象已经不再需要,在垃圾回收时就会清除该对象占用的空间。
因此,在不需要的时候应该对对象的引用释放掉,以利于垃圾回收。这样可以提高性能。最常用的方法就是为其赋值null。
1.4.3易犯的错误
在堆和栈的使用问题上,最易犯错误的就是String的使用,例如:
var str1 = new String("abc"); //存放在堆中
var str2 = "abc";//存放在栈中
下面进行逻辑运算来深入了解以下:
(1)存放在栈中
var str1 = "abc";
var str2 = "abc";
alert(str1==str2);//true
alert(str1===str2);//true
(2)存放在堆中
var str1 = new String("abc");
var str2 = new String("abc");
alert(str1==str2);//false
alert(str1===str2);//false
(3)一个存放在堆中,一个栈中
var str1 = "abc";
var str2 = new String("abc");
alert(str1==str2);//true 在进行逻辑等于运算时,会首先将变量转换成相同的数据类型,然后进行对比。
alert(str1===str2);//false
1.5数据类型的转换
在js中,有时进行数据运算前会对数据类型进行转换,分为两种
(1)强制数据转换。
可以使用全局函数进行数据类型转换,这些函数包括parseFloat()、parseInt()、Number()、String()和Boolean()函数。
(2)隐式数据类型转换,比如赋值的时候。
Javascript声明和使用变量的更多相关文章
- 【JavaScript声明变量的规则】
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- javascript声明变量
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 为什么JavaScript声明变量的时候鼓励加var关键字
在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它. var x = "XX"; y ="xx ...
- JavaScript基本语法(JavaScript代码嵌入方式与声明和使用变量)
.JavaScript代码嵌入方式 #①HTML文档内 JavaScript代码要写在script标签内 script标签可以写在文档内的任意位置 为了能够方便查询或操作HTML标签(元素)scrip ...
- JavaScript(1)——变量、函数声明及作用域
这是我的第一篇博客文章,本人不才,文笔也不好,所以可能写的有点凌乱.有什么不对的地方还望见谅.不过每天进步一小步,总有一天会迈出那一大步.以下内容是我对变量.函数声明及函数表达式.作用域的理解. [变 ...
- JavaScript系列文章:变量提升和函数提升
第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函 ...
- JavaScript声明全局变量的三种方式
JavaScript声明全局变量的三种方式 JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍. 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为 ...
- JavaScript获取后台C#变量以及调用后台方法
http://www.educity.cn/develop/495493.html 有时需要在JavaScript中获取后台变量的值,来判断JavaScript的执行逻辑,或者需要调用C#后台方法获取 ...
- JavaScript神一样的变量系统
话说上一篇介绍了JavaScript故事版的身世之谜.看官你估计也明白JavaScript出生之时,就未曾托于重任.布兰登-艾奇估计也没料到今天的JavaScript变得如此重要.要不然,当年他也不会 ...
随机推荐
- vscode点击ctrl键报错Request textDocument/definition failed.
现象 用vscode写java代码的时候突然出现,修复问题点击Ctrl时,输出窗口就打日志,报错Request textDocument/definition failed. 我百度唯一的有用线索就是 ...
- BlackArch-Tools
BlackArch-Tools 简介 安装在ArchLinux之上添加存储库从blackarch存储库安装工具替代安装方法BlackArch Linux Complete Tools List 简介 ...
- Day6 - F - KiKi's K-Number HDU - 2852
For the k-th number, we all should be very familiar with it. Of course,to kiki it is also simple. No ...
- ahk键盘增强✨✨✨
ahk键盘增强✨✨✨ ahk的一个键盘增强脚本,仅在winwods下可用,长期更新 仓库链接 首先感谢ahk的大神们,这个工具能极大地增加生产力 功能简介 myahk旨在增强windows下的键盘功能
- NoSql相关
1 NoSQL, No Problem: An Intro to NoSQL Databases https://www.thoughtworks.com/insights/blog/nosql-n ...
- 反射①:如何获取class对象六种方法
获取class对象的六种方法 了解:class类——是Java反射机制的入口,封装了一个类或接口的运行信息,通过调用Class类的方法可以获取这些信息,其特点如下: 1.该类在java.lang包中: ...
- 使用delphi TThread类创建线程备忘录
备忘,不常用经常忘了细节 TMyThread = class(TThread) private { Private declarations } protected procedure Execute ...
- Spring boot application.properties和 application.yml 初学者的学习
来自于java尚硅谷教程 简单的说这两个配置文件更改配置都可以更改默认设置的值比如服务器端口号之类的,只需再文件中设置即可, properties可能是出现的比较早了,如果你不调你的默认编码,中文可能 ...
- java 三羊献瑞
三羊献瑞 观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写"三羊献瑞"所代表的4位数字(答案唯一),不要填写任何多余内容. public ...
- Nachos-Lab3-同步与互斥机制模块实现
源码获取 https://github.com/icoty/nachos-3.4-Lab 内容一:总体概述 本实习希望通过修改Nachos系统平台的底层源代码,达到"扩展同步机制,实现同步互 ...