JavaScript练习1----变量

JavaScript在经历了各个版本之后,已经到了ES6了,很令人兴奋,本人也开始了从原来稍微学点JavaScript开始,到目前的开始由浅及深的学习它了,开此博客以记录学习进程。

  1. var声明和使用
var a;//使用var定义变量
console.info(a); //undefined,变量在未赋值的情况下是undefined类型
a=12;
console.info(a);//12,此时变量类型是number类型的
a="hello world !";
console.info(a);//hello world ! ,此时变量类型是String的,
//由于javascript是弱类型的语言,因此可以动态改变变量的类型,但是出于安全考虑,不推荐这么使用
function s(){
var message="我是局部变量";
}
console.info(message);//undefined,由于message是个在方法内部中的局部变脸,并且没有外部引用,因此此处结果是undefined
var b=0;//此处b和上文中的a都是全局变量,实际上他们都是全局对象window的一个变量
var m,n,k;//同样,JavaScript允许同时定义多个变量
w=9;
console.info(w);//9,由于类型提升功能,w隐式的定义为 var w=9;
//JavaScript代码在执行过程中,会在当前作用域当中寻找该变量的声明,如果找不到,就往上找,直到顶级声明位置
//若果在顶级声明位置仍然没有找到声明,那么会被在顶级作用域当中隐式声明。
//但是采用严格模式,这样未定义就使用的代码会报错。
  1. let声明
//为了提高javascript代码对变量的管理能力,es6引入了let声明,来表述在代码块中的临时变量
{
  let a=10;
  var b=10;
}
a//报错,由于a用let声明,那么a此时只在它所在的代码块中有效
b//1 var变量返回正确的值

//对于过去的循环计数器,let声明变得更加适合,计数器i不再泄露为全局变量
for(let i=0;i<array.length;i++){
console.info(i);
}
//由于var变量在全局作用域下,所以循环当中使用的var i变量是一个,所以最后循环结束,变量i被覆盖为10
var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10
//若果使用的是let声明,声明的变量只会在当前的块级作用域下有效,因此每次进入代码块,都会重新声明一个let i变量,所以i不是一个i,因此值不会覆盖,所以最后输出为6
var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6
//let声明不会发生变量提升
console.info(f);//输出为undefined。变量发生提升了
console.info(b);//报错,变量未定义
var f=2;
let b=2;

//let变量死区
var tmp = 123;
if (true) {
  tmp = 'abc'; // 报错
  let tmp;
}
//全局变量在代码块中临时声明为let,在该代码块中发生死区,在之前的任何对tmp的操作都会发生死区,即无法对该变量操作,此时会报错.
//在代码块内,使用let命令声明变量之前,该变量都是不可用的
//在发生死区的时候,typeof操作会报错(typeof操作符不再是一个百分百安全的操作符了)
typeof undeclaredVariable//如果该变量发生了死区会报错
function fuc(x=y,y=1){
  return x+y;
}
fuc();//报错,x=y这句代码先用到了y,但是y在后面y=1当中才声明,因此会报错
//但如果先声明变量,后使用,就会正确执行
function fuc(x=1,y=x){
  return x+y;
}
fuc();
//变量死区是过去变量乱用导致过多错误的改进,死区会很容易的避免这种情况的发生
// let声明不允许重复声明
function(){
  let a=1;
  let a=2;
}
function(){
  var a=1;
  var a=1;
}
function(a){
  let a=1;
}
//以上三个都会报错,只要发生了let变量的重复声明,都会报错

//let变量好处,防止变量泄露
//类型提升造成的泄露
var t=new Date();
function f(){
  console.info(t);//此处发生了变量提升,t成了外层的变量
  if(false){
    var t="hello world !";//此处t覆盖了t变量
    }
    //退出代码块之后,t被回收
  }
f();//undefined
  1. const声明
const PI=3.14//const声明表示一个制度常量,一旦声明,常量中的值就不能改变
{
  const PI=3.14;//const声明同样只会在所在的代码块有效
}
{
  console.info(PI);//报错,const没有变量提升
  const PI=3.14;
}
var PI=3.14function func(){
  const PI=3.14;//报错,const修饰不允许重复声明
}
const obj={};
const arr=[];
obj.a="hello world !";//const修饰仅仅只是引用不能改变,引用的内容可以变更
arr[0]=10;//const修饰仅仅只是引用不能改变,引用的内容可以变更
obj={};//报错,不能修改引用,否则会报错
arr=[];//报错,不能修改引用,否则会报错
  1. 变量析构
//以往为变量赋值,只能直接给变量指定值
var x=1;
var y=2;
var z=3;
//现在可以使用解构函数来写(左右两边必须都是可遍历的值)
var [x,y,z]=[1,2,3];//x=1,y=2,z=3
//解构函数可以做到匹配特殊类型的数据
var [x[[y],z]]=[1,[[2],3]];//x=1,y=2,z=3
//也可以只匹配一部分
var [,,z]=[1,2,3];//z=3
//也能够匹配长参数
var [x,y,...z]=[1];//x=1,y=undefined,z=[],没有匹配到值,就是undefined,长参数没有匹配到是空数组
//当两边不能完全匹配的时候,默认匹配到第一个符合的值
var [x,y]=[1,2,3];//x=1,y=2
var [x[[y],z]]=[1,[[2,3],4]];//x=1,y=2,z=4
//解构函数可以使用默认值
var [x,y=2]=[1];//x=1,y=2

//除了数组外,对象也有解构函数,与数组不同之处是不必一一对应,但是名称必须一致
var {x,y}={x:1,y:2};//x=1,y=2
//如果名称不一致,那么需要使用别名
var {x,y:z}={x:1,z:2};//x=1,y=2
//同样对象的解构函数也支持默认值
var {x, y = 5} = {x: 1};//x=1,y=5
  1. var命名建议
    s:表示字符串。例如:sName,sHtml;
    n:表示数字。例如:nPage,nTotal;
    b:表示逻辑。例如:bChecked,bHasLogin;
    a:表示数组。例如:aList,aGroup;
    r:表示正则表达式。例如:rDomain,rEmail;
    f:表示函数 例如:fGetHtml
    o:表示以上未涉及到的其他对象 如:oButton
    1:作用域不大临时变量可以简写,如:str,num,bol,obj,fun,arr.
    2:循环变量可以简写,比如:i,j,k等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript中,变量声明是非常重要的一部分。根据引用,变量声明需要遵守一些规则,比如变量名必须以英文字母、下划线(_)或美元符号($)开头,而后面可以包含字母、下划线(_)、美元符号($)和数字。变量名不能使用系统的关键字或保留字作为变量名。在JavaScript中,变量有不同的数据类型,包括Number、String、Boolean、undefined和null。如果声明了一个变量但未赋值,则它的值为undefined。 根据引用,练习题是一个很好的学习JavaScript变量的方式。通过练习,可以巩固对变量声明和赋值的理解,并提升编程能力。练习题可以包括不同的难度级别,从简单的变量声明到复杂的类型转换和条件语句。这样的练习题可以帮助新手更好地掌握JavaScript变量的概念和用法。 所以,JavaScript变量练习题可以包括以下内容: - 变量声明和赋值 - 数据类型转换 - 条件语句和循环语句的应用 通过这些练习题,可以提高对JavaScript变量的理解和熟练度。希望这些练习对你的学习有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [(一)Javascript变量至类型转化(含练习)](https://blog.csdn.net/weixin_51458883/article/details/114852562)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [JavaScript变量声明详解](https://download.csdn.net/download/weixin_38713450/13040420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值