javascript的介绍,变量let和var声明,变量作用域,解构赋值
发布日期:2021-06-29 11:42:40 浏览次数:2 分类:技术文章

本文共 4156 字,大约阅读时间需要 13 分钟。

JavaScript除了语法上有点像Java,其他部分基本上没啥关系。ECMAScript是一种语言标准,而JavaScript是网景公司对ECMAScript标准的一种实现。由于JavaScript的标准——ECMAScript在不断发展,最新版ECMAScript 6标准(简称ES6)已经在2015年6月正式发布了。

ECMAScript第一版标准发布于:1997年

JavaScript代码的处理方式:

1.直接嵌在网页的任何地方,不过通常我们都把JavaScript代码放到<head>中;由<script>...</script>包含的代码就是JavaScript代码,它将直接被浏览器执行。

2.把JavaScript代码放到一个单独的.js文件,然后在HTML中通过<script src="..."></script>引入这个文件

3.JavaScript严格区分大小写,如果弄错了大小写,程序将报错或者运行不正常。

 

如何编写JavaScript:

Visual Studio Code、Notepad++。注意:不可以用Word或写字板来编写JavaScript或HTML,因为带格式的文本保存后不是纯文本文件,无法被浏览器正常读取。也尽量不要用记事本编写,它会自作聪明地在保存UTF-8格式文本时添加BOM头。

语法:

要特别注意相等运算符==。JavaScript在设计时,有两种比较运算符:第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。由于JavaScript这个设计缺陷,不要使用==比较,始终坚持使用===比较

JavaScript中变量名是大小写英文、数字、$_的组合,且不能用数字开头。变量名也不能是JavaScript的关键字,如ifwhile等。申明一个变量用var语句.变量名也可以用中文,但是,请不要给自己找麻烦。

变量本身类型不固定的语言称之为动态语言,例如python、JavaScript;与之对应的是静态语言,静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错,例如Java、C。

使用console.log()代替alert()的好处是可以避免弹出烦人的对话框。

启用strict模式的方法是在JavaScript代码的第一行写上:'use strict';

ES6标准新增了一种多行字符串的表示方法,用反引号 ` ... ` 表示,如

`你好, ${name}, 你今年${age}岁了!`;

变量作用域与解构赋值:

如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量;不同函数内部的同名变量互相独立,互不影响

'use strict';function foo() {    var x = 1;    x = x + 1;}function bar() {    var x = 'A';    x = x + 'B';}x = x + 2; // ReferenceError! 无法在函数体外引用变量x

函数嵌套时,内部函数可以访问外部函数定义的变量,反过来则不行;

'use strict';function foo() {    var x = 1;    function bar() {        var y = x + 1; // bar可以访问foo的变量x!    }    var z = y + 1; // ReferenceError! foo不可以访问bar的变量y!}

如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量。JavaScript的函数在查找变量时从自身函数定义开始,从“内”向“外”查找。

'use strict';function foo() {    var x = 1;    function bar() {        var x = 'A';        console.log('x in bar() = ' + x); // 'A'    }    console.log('x in foo() = ' + x); // 1    bar();}

在函数内部定义变量时,请严格遵守“在函数内部首先申明所有变量”这一规则。最常见的做法是用一个var申明函数内部用到的所有变量:变量之间用逗号分开,语句完成使用分号结尾。

'use strict';function foo() {    var        x = 1, // x初始化为1        y = x + 1, // y初始化为2        z, i; // z和i为undefined    // 其他语句:    for (i=0; i<100; i++) {        ...    }}

全局作用域:不在任何函数内定义的变量就具有全局作用域

名字空间:不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同名字的顶层函数,都会造成命名冲突,并且很难被发现。把自己的代码全部放入唯一的名字空间MYZHU中,会大大减少全局变量冲突的可能。

// 唯一的全局变量MYZHU即名字空间var MYAPP = {};  //大括号表示名字空间// 其他变量都在这个名字空间内MYAPP.name = 'myapp';   MYAPP.version = 1.0;// 其他函数,采用函数的第二种定义方式,赋值给一个变量,那么结尾要是用分号。MYAPP.foo = function () {    return 'foo';};

局部作用域:

由于JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块(不是函数)中是无法定义具有局部作用域的变量的。

'use strict';function foo() {    for (var i=0; i<100; i++) {        //该语句块中定义了变量i    }    i += 100; // 但是语句块之外仍然可以引用变量i}

关键字let:为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量

'use strict';function foo() {    var sum = 0;    for (let i=0; i<100; i++) {        sum += i;    }    i += 1;  // SyntaxError语法错误,i不能在块外引用}

const常量:

变量的申明:var和let;如果要申明一个常量,在ES6之前是不行的,我们通常用全部大写的变量表示“这是一个常量,不要修改它的值”:

'use strict';var PI = 3.14;  // 用全部大写的变量来表示“这是一个常量,不要修改它的值”PI = 3; // 某些浏览器不报错,但是无效果!还是被修改了PI; // 3.14

ES6标准引入了新的关键字const来定义常量constlet都具有块级作用域:

'use strict';const PI = 3.14;PI = 3; // 基本上会报错,但是某些浏览器不报错,但是无效果!PI; // 3.14

解构赋值:

从ES6开始,JavaScript引入了解构赋值,可以同时对一组变量进行赋值。

对数组元素进行解构赋值时,多个变量要用[...]括起来。如果对象解构赋值时,多个变量要用{...}括起来。

'use strict';数组的解构赋值,变量和数组顺序对应var [x, y, z] = ['hello', 'JavaScript', 'ES6'];let [x, [y, z]] = ['hello', ['JavaScript', 'ES6']];let [, , z] = ['hello', 'JavaScript', 'ES6']; // 忽略前两个元素,只对z赋值第三个元素let [z] = ['hello', 'JavaScript', 'ES6']; // 只对z赋值第一个元素对象的解构赋值var person = {    name: '小明',    age: 20,    gender: 'male',    passport: 'G-12345678',    school: 'No.4 middle school'};var {name, age, passport} = person;   // 变量名字一定是keyvar {pname, page, apassport} = person;  //如果变量名不是key,那么全是undefined如果要使用的变量名和属性名不一致,可以用下面的语法获取:let {name, passport:apassport} = person; //那么变量名apassport就不是undefined而是passport的valuevar {name, single=9} = person; // // 如果person对象没有single属性,设置默认赋值为9,就不是undefined类型了

变量先声明了,解构赋值会报错误:

先声明变量:var x, y;对于数组的解构赋值是正确的,没有语法错误[x,y]=['name',980];  // x='name'  y=980对于对象的解构赋值时错误的,出现了语法错误{x, y} = { name: '小明', x: 100, y: 200};  // 语法错误: Uncaught SyntaxError: Unexpected token =因为JavaScript引擎把{开头的语句当作了块处理,于是=不再合法。解决方法是用小括号括起来:({x, y} = { name: '小明', x: 100, y: 200});

 

 

 

转载地址:https://blog.csdn.net/zz2230633069/article/details/107963113 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:统一资源定位符URL
下一篇:学习前后端技术的建议

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月27日 10时39分32秒