-
JavaScript 变量
2019-02-27 21:35:37JavaScript 变量 JavaScript 变量名称的规则: 声明(创建) JavaScript 变量 向 JavaScript 变量赋值 向未声明的 JavaScript 变量赋值 重新声明 JavaScript 变量 JavaScript 变量 正如代数一样,...目录
JavaScript 变量
正如代数一样,JavaScript 变量用于保存值或表达式。
可以给变量起一个简短名称,比如 x,或者更有描述性的名称,比如 length。
JavaScript 变量也可以保存文本值,比如 carname="Volvo"。
JavaScript 变量名称的规则:
- 变量对大小写敏感(y 和 Y 是两个不同的变量)
- 变量必须以字母或下划线开始
注释:由于 JavaScript 对大小写敏感,变量名也对大小写敏感。
声明(创建) JavaScript 变量
在 JavaScript 中创建变量经常被称为“声明”变量。
您可以通过 var 语句来声明 JavaScript 变量:
var x; var carname;
在以上声明之后,变量并没有值,不过您可以在声明它们的同时向变量赋值:
var x=5; var carname="Volvo";
注释:在为变量赋文本值时,请为该值加引号。
向 JavaScript 变量赋值
通过赋值语句向 JavaScript 变量赋值:
x=5; carname="Volvo";
变量名在 = 符号的左边,而需要向变量赋的值在 = 的右侧。
在以上语句执行后,变量 x 中保存的值是 5,而 carname 的值是 Volvo。
向未声明的 JavaScript 变量赋值
如果您所赋值的变量还未进行过声明,该变量会自动声明。
这些语句:
x=5; carname="Volvo";
与这些语句的效果相同:
var x=5; var carname="Volvo";
重新声明 JavaScript 变量
如果您再次声明了 JavaScript 变量,该变量也不会丢失其原始值。
var x=5; var x;
在以上语句执行后,变量 x 的值仍然是 5。在重新声明该变量时,x 的值不会被重置或清除。
-
JavaScript变量
2020-11-12 17:38:56JavaScript变量1. 变量声明规则2. var2.1 var声明变量2.2 var变量作用域2.3 var变量提升3. let3.1 let的区别4. const4.1 const的区别5. 用var还是let还是const? 变量用来存储数据,在JavaScript中,变量是松散类型...JavaScript变量
变量用来存储数据,在JavaScript中,变量是松散类型的,所以变量可以用来保存任何类型的数据。
有3个关键字可以用来声明变量:var、let、const。1. 变量声明规则
- 区分大小写,也就是说name和Name是2个不同的变量。
- 变量名第一个字符必须是字母、下划线( _ )、美元符号( $ ),首字符不能为数字。
- 变量名不能为关键字、保留字,如do、in、if等等。
2. var
在ES6之前,都是使用var来声明变量
2.1 var声明变量
要声明变量需要在var后面跟上一个变量名,如:
var a;
这段代码通过var声明了一个名字为a的变量,它可以保存任意的数据类型,因为没有给他赋值,他的值默认为undefined。
可以在声明变量的时候直接赋值,如:var a = 123; var b = '你好';
这段代码声明了变量a,赋值为Number类型的123和声明了变量b赋值为String类型的你好。
2.2 var变量作用域
1. 全局变量
通过var声明的全局变量,是在window对象中的,如:
var a = 1; console.log(a); // 1 console.log(window.a); // 1
2. 局部变量
也可以在函数内部中声明变量,这样他就会成为函数的局部变量,在函数退出时变量会被销毁,如:
function a() { var b = 123; console.log(b); // 123 } a(); console.log(b); // 出错,会提示b没有定义。
在上面代码中,在a函数内部中声明了一个变量b,在执行完函数后,变量b会被销毁,所以最后一句代码会报错,提示b没有定义。
3. 其他
在函数内,是可以访问全局变量的,如:
var num = 123; function a() { console.log(num); // 123 } a();
在全局变量和局部变量名相同的情况下,会优先使用最近作用域当中的局部变量,如果当前作用域中没有这个变量,那么它会向上一层层的作用域中寻找,直到找到变量为止,如果到了window对象还没有这个变量,那么会报错,如:
var num = 123; // 全局变量 function a() { var num = 222; // 局部变量 console.log(num); // 222 输出的局部变量 } function b() { console.log(num); // 123 输出的全局变量 } function c() { console.log(xx); // 报错 没有找到这个变量 } a(); b(); c();
上面代码,有一个全局变量num,函数a中,因为也声明了局部变量名叫num,所以函数a中输出的是222。函数b中,没有名为num的局部变量,所以向上寻找,直到在全局变量中找到了num,输出为123。函数c中,并没有声明局部变量xx,向上寻找也未寻找到名为xx的变量,所以会报错,提示变量xx未定义。
2.3 var变量提升
function a() { console.log(b); var b = 123; console.log(b); } a();
看到这段代码,第一反应是,函数a中的第一句console.log(b);肯定会报错,因为变量b是在这一句的下面才声明的,而且全局变量中也没有b,其实并不是这样的,因为通过var声明的变量会自动把声明都放在作用域的最顶部,同等于以下代码:
function a() { var b; console.log(b); // undefined b = 123; console.log(b); // 123 } a();
函数a中,第一句就直接声明了变量b,没有给他赋值,所以第一句输出语句输出的值是undefined,在下面才给它赋值为123,所以第二句输出语句输出的值为123。
3. let
let是es6中新出的声明变量的关键字,他和var基本上一样,但是也有一些区别。
3.1 let的区别
- let是块级作用域,而var是函数作用域。
- let没有变量提升。
- let声明的全局变量不在window对象中。
这是一个块级作用域的例子:
if (true) { var a = 11; let b = 22; console.log(a); // 11 console.log(b); // 22 } console.log(a); // 11 console.log(b); // 报错 没有定义
首先可以看到,if代码块中通过var和let各声明了一个变量a和b。
a因为是通过var声明的,是函数作用域,然而if并不是函数,所以a会成为全局变量,所以if中和下面的代码输出a的值都为11。
b通过let声明,在if代码块中属于局部变量,作用域只在if代码块中,所以if代码块中输出b的值为22,最下面输出b的值会报错。
再看一个let没有变量提升的例子:
function a() { console.log(b); // Cannot access 'b' before initialization let b = 11; } a();
a函数中,在声明b之前输出b值,报错提示不能在声明b之前使用b,代表了let声明的变量是没有变量提升的。
let声明的全局变量不在window对象中例子:
var a = 1; let b = 2; console.log(window.a); // 1 console.log(window.b); // undefined
可以看到,通过var声明的变量是在window对象中的,通过let声明的变量不在window中,所以输出结果为undefined。
4. const
const也是es6新出的一种声明变量的关键字,它和let基本上一样,但是也有一些区别。
4.1 const的区别
- 通过const声明变量的时候必须赋值。
- 不能修改const的值。
通过const声明变量的时候必须赋值,看一个例子:
const a; // 报错 Missing initializer in const declaration const a = 1; // 正确
不能修改const的值,例子:
const a = 1; a = 2; // 报错 Assignment to constant variable.
注意、注意、注意、 不能修改const的值是指的不修改他的指向的变量的引用,如果你的值是一个对象,那么是可以修改这个对象的内部属性的,因为他的指向没有变,例如:
const a = { b: 2, } a.b = 3 const c = {} c = {} // 报错 Assignment to constant variable.
这个例子声明了一个对象a,并且修改了它的内部属性b,a的指向没有变,这样并不违反const的规则。
下面还声明了一个对象c,并且重新给他赋值了一个对象,这样指向会改变,违反了const规则并报错。5. 用var还是let还是const?
有些人可能会懵了,3个到底要用哪一个?
根据现在的开发者普遍的情况,总结如下:- 不再使用var。
因为新出的let和const,有明确的作用域,声明位置等,为了提高代码的可读性,稳定性,推荐不要再使用var。 - 优先使用const,其次使用let。
使用const会更有信心的知道这个值不会变,有利于提高代码的稳定性,预防一些不可预测的问题出现,如果你知道某个值在未来会被修改,那么使用let。
-
javascript变量
2011-05-27 14:40:001.javascript变量是无类型的,这意味着javascript的变量可以存放任何类型的值,例如,在javascript中,可以把一个数值赋值给一个变量,然后再把一个字符串赋给它,这完全合法。 var i = 10; i = ...变量
变量类型
1.javascript变量是无类型的,这意味着javascript的变量可以存放任何类型的值,例如,在javascript中,可以把一个数值赋值给一个变量,然后再把一个字符串赋给它,这完全合法。
var i = 10;
i = "hello";
有一个特性是与javascript缺少类型规则相关,即在必要时javascript可以快速自动的将一种
类型的值转换成另一种类型(数据类型转换)。
2.变量声明
在javascript程序中,使用一个变量之前,必须先声明,变量使用var 关键字声明,一个var 关键字可以同时声明多个变量,而且可以将声明变量和变量初始化绑定到一起。
var i = 0; message = "hello";
var 声明的变量未赋值时,它的初始值为undefined
3.重复声明变量和遗漏的声明
在javascript中使用var语句多次声明同一个变量是合法的。如果重复的声明有一个初始值,那么它担当的不过是一个赋值语句的角色。
如果尝试读一个未声明的变量值,javascript会生成一个错误。
如果尝试给一个未用var声明的变量赋值,javascript会隐式声明该变量,但是隐式声明的变量总是被创建为全局变量。
4.变量的作用域
一个变量的作用域(scope)是程序中定义这个变量的区域。全局变量的作用域是全局的。局部变量作用域是局部的。在函数体内部,局部变量的优先级比同名的全局变量高。 例如
var scope = "global";
function checkscope(){
var scope = "local";
document.write(scope);
}
checkscope();
5.没有块级作用域
和C++,JAVA不同,javascript没有块级作用域 ,函数中声明的所有变量,无论在哪声明,在整个函数中它们都是有定义的 ,如下面代码中,变量I,j,k的作用域是相同的。它们3个在整个函数体都有效。
例子1
function test(s){
var i = 0; //i在整个函数中有定义
if(typeof s == "object"){
var j = 3; //j到处都有定义,不仅限于这个代码块
for(var k =0;k<10;k++){
document.write(k); //k到处都有定义,不仅限于该循环
}
document.write(k); //k仍旧有定义,输出10
}
document.write(j); //j仍旧有定义,输出3
}
test(new String());
例子2
var scope = "global";
function f(){
alert(scope); //显示"undefined",而不是"global"
var scope = "local"; //变量在此处被初始化,但到处都有定义
alert(scope); //显示"local";
}
f();
例子2等价于
var scope = "global";
function f(){
var scope;
alert(scope); //显示"undefined",而不是"global"
var scope = "local"; //变量在此处被初始化,但到处都有定义
alert(scope); //显示"local";
}
f();
6.变量的基本类型和引用类型
基本类型(数值,布尔,null,undefined)在内存中有固定的大小,对象,数组,函数属于应用类型。
字符串是一个特例。
全局对象
当javascript解释器开始执行时,它首先要做的事情之一就是在执行任何javascript代码前,创建一个全局对象(global object) 。这个对象的属性就是javascript程序的全局变量。当声明一个全局变量时,实际上是做的是定义了那个全局对象的的一个属性。 在顶层代码中(不属于函数的javascript代码),你可以使用关键字this来引用这个全局对象。在函数内,this则另有用途。
在客户端javascript中,Window对象代表浏览器窗口。它是包含在该窗口中所有javascript的全局对象。
局部变量:调用对象
全局变量是特殊的全局对象的属性,局部变量也是一个对象的属性,这个对象被称为调用对象(call object)。在执行一个函数时,函数的参数和局部变量是作为这个调用对象的属性存储的。用一个完全独立的对象来存储局部变量使javascript可以防止局部变量覆盖同名的全局变量的值。
javascript的执行环境
一个执行环境就是所有javascript代码段执行时所在的环境,这个环境的一个重要部分就是定义变量的对象。因此,运行在不属于任何函数的javascript代码的环境使用的是全局对象,所有的javascript函数都运行在自己独有的执行环境,而且具有自己的调用对象,在调用对象中定义了局部变量。
深入理解变量的作用域
从词法结构上,全局变量具有全局作用域,而函数中声明的变量具有局部的作用域。如果一个函数定义嵌套在另一个函数中,那么嵌套的函数中声明的变量就具有嵌套的局部作用域。
-
javaScript 变量
2014-12-10 22:03:23javaScript是弱类型的脚本语言,根据赋值决定变量类型,比如整形 :var a=1; String:var str1=“asd” 变量命名规则: 1、以字母、下标“_”、或“$”开头 2、变量名长度不能超过255 3、变量名中不允许使用空格 4...javaScript是弱类型的脚本语言,根据赋值决定变量类型,比如整形 :var a=1; String:var str1=“asd”
变量命名规则:
1、以字母、下标“_”、或“$”开头
2、变量名长度不能超过255
3、变量名中不允许使用空格
4、不能使用脚本语言中的关键字、保留符作为变量名
5、变量名区分大小写, javascript区分大小写,不区分 ' 、 " 。
全局变量
在方法外部声明的变量、或在方法内部没有加var关键字声明的变量
局部变量
方法内部声明的
数据类型:
基本数据类型:Number、Boolean、String、Undefined、Null
引用类型:Object类型(对象,数组,Date。。。)
Number:整数、小数(最高精度为小数点后17位)、NaN、Infinity、-Infinity(+-无穷)。
NaN:比如:var c=parseInt("asd");
Undefined:变量声明但未赋值。
Null:表示一个空的对象引用。
数组:var arry=[1,2,3]; 日期:var dates=new Date(); 对象:var object={ };
用typeof判断数据类型
数据字动转化
==:可以经过自动转化,只比较数值。===:可以经过自动转化,只比较数值,还要比较数据类型
数组
js数组类似于java容器,长度可变,元素类型也可以不同,var arr=[ ]; var arr=new Array();常用方法:push、pop、shift(在数组前弹出)、unshift(在数组前插入)、splice(第一个参数:起始位置,第二个参数:截取的个数;第三个参数以后:表示追加的新元素 操作数组本身)、slice(截取,左闭右开,不操作数组本身)、concat(合并,不操作数组本身)、join(不操作数组本身,在每个元素之间插入内容)、sort(正序排序)、 reverse(倒序)
Object
是所有类的基础类,var obj=new Object();
var obj={ };
obj.name='lmy';
obj.age=12;
obj.say=function(){
alert("hello");
} -
JavaScript 变量
2007-03-28 20:33:00JavaScript的变量是无类型(untype)的,这意味着JavaScript的变量可以存放任何类型的值。如:在JavaScript中可以先把一个数值赋给一个变量,然后再把一个字符串赋给这个变量。而且JavaScript可以在必要的时候自动将一... -
JavaScript变量提升
2020-03-12 11:34:40JavaScript变量提升 在JavaScript中变量声明与函数声明都会被提升到作用域顶部,优先级依次为:变量声明 函数声明 变量赋值 变量提升 var的变量提升 console.log(a); // undefined var a = 1; consol... -
javascript变量命名规则
2019-05-22 21:00:49javascript变量命名规则: 以字母、下划线、$开头; 区分大小写; 由字母、下划线、$或数字组成; 不能使用关键字和保留字 -
JavaScript 变量提升
2016-12-15 09:49:33回归基础: JavaScript 变量提升(Hoisting)变量声明是所有的编程语言中最基础部分之一。然而,JavaScript 有一个怪异点,称之为变量提升(hositing),这个能够让一个看上去无关紧要的声明变成一个小bug。这篇文章... -
JavaScript变量赋值
2016-05-30 15:18:19javascript变量赋值: a="333"; b="hhh"; 诸如此类就是javascript的变量,给变量赋值有以下种3方法: 1.直接赋值: a="333"; b="hhh"; 2.先声明变量,后给变量赋值 var a; var b; a="333"; b="hhh"; ... -
javascript 变量基础
2015-08-28 09:51:561.javascript变量是无类型的,这意味着javascript的变量可以存放任何类型的值,例如,在javascript中,可以把一个数值赋值给一个变量,然后再把一个字符串赋给它,这完全合法。 var i = 10; i = "hello"; 有... -
JS--JavaScript变量详解(全局变量、局部变量)
2019-09-21 20:45:14JavaScript变量 JavaScript使用var关键字声明变量。声明变量的5种常规用法如下: var a; //声明单个变量。var关键字与变量名之间以空格分隔 var b, c; //声明多个变量。变量之间以逗号分隔 var d = 1; //声明... -
JavaScript变量,数据类型,声明变量
2018-04-21 17:32:381. JavaScript变量 变量名必须以字母或下划线("_")开头变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)变量名称对大小写敏感(y 和 Y 是不同的变量)变量可以包含数字、从 A 至 Z 的大小写字母... -
Javascript变量作用域、变量提升
2017-09-19 08:18:31Javascript变量、变量提升以及作用域 执行环境对js编程的重要性不容忽视,理解其执行的原理,将有效提升编程素养。 -
JavaScript变量声明那些事儿
2015-06-01 17:42:02JavaScript变量声明、JavaScript变量前置、JavaScript全局变量 -
javascript变量之声明
2014-10-28 14:14:06javascript变量根据命名规范可以提高脚本的可读性,javascript变量的良好声明习惯也是提高开发效率的利器之一。 JavaScript是一种弱类型语言,在声明变量时,不需要指定变量的类型,变量的类型由赋给变量的值确定... -
JavaScript变量的定义及类型
2020-09-01 21:43:36JavaScript变量的定义及类型定义变量JavaScript的数据类型undefinednullbooleannumberstringobject 定义变量 JavaScript使用 var来定义变量,多个变量名之间用逗号隔开。定义变量是不为其赋值则缺省为undefined,... -
java变量和javascript变量之间的传递
2019-04-28 16:27:00java代码是运行在服务器上的,返回的值只是静态的存在于...java变量传递给javascript变量,这个比较简单,就是平时的普通方法就好: var cnt = <%=number%>; 注意别漏掉等号!这个没什么问题。 eg: <... -
JavaScript 变量声明提前
2016-10-02 22:01:33《JavaScript权威指南》中指出:JavaScript变量在声明之前已经可用,JavaScript的这个特性被非正式的称为声明提前(hoisting),即JavaScript函数中声明的所有变量(但不涉及赋值)都被“提前”至函数的顶部。...