js 注释/声明

JavaScript 借鉴了 Java 的大部分语法,但同时也受到 Awk,Perl 和 Python的影响。JavaScript 是区分大小写的,并使用 Unicode 字符集。

在 JavaScript 中,指令被称为语句(Statement),并用分号(;)进行分隔。如果一条语句独占一行的话,那么分号是可以省略的。但如果一行中有多条语句,那么这些语句必须以分号分开。

注释

Javascript 注释的语法和 C++ 或许多其他语言类似,在代码执行过程中,注释将被自动跳过(不执行)。

你可能会在一些 JavaScript 脚本中见到像这样#!/usr/bin/env node的第三种注释,这种注释我们称为hashbang 注释 (hashbang comment),这种注释被用来指定执行 JaveScript 脚本的引擎的路径

// 单行注释

/* 这是一个更长的,
   多行注释
*/

/* 然而,你不能,/* 嵌套注释 */ 语法错误 */

声明

声明就是变量前面的关键字,JavaScript 有三种声明方式。

var:声明一个变量,可选初始化一个值。
let:声明一个块作用域的局部变量,可选初始化一个值。
const:声明一个块作用域的只读常量,必须初始化一个值。

下面来看看这三种声明有什么区别。

var 定义的变量可以修改,如果不初始化会输出undefined,不会报错。

var a = 1;
// var a;//不会报错
console.log('函数外var定义a:' + a);//可以输出a=1
function change(){
	a = 4;
	console.log('函数内var定义a:' + a);//可以输出a=4
} 
change();
console.log('函数调用后var定义a为函数内部修改值:' + a);//可以输出a=4

var 声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用。

for(var i=0;i<=1000;i++){ 
	var sum=0; 
	sum+=i; 
} 
alert(sum);//外部可以访问sum变量

let 是块级作用域,函数内部使用let定义后,对函数外部无影响。并且let不能定义同名变量,否则会报错。

JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称ES6)中新增了块级作用域。块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。所以必须声明’use strict’;后才能使用let声明变量否则浏览并不能显示结果。

let c = 3;
console.log('函数外let定义c:' + c);//输出c=3
function change(){
	let c = 6;
	console.log('函数内let定义c:' + c);//输出c=6
} 
change();
console.log('函数调用后let定义c不受函数内部定义影响:' + c);//输出c=3
if (true) {
  let y = 5;
}
console.log(y); // ReferenceError: y 没有被声明

const 用于声明常量,也具有块级作用域 ,也可声明块级。const定义的变量不可以修改,而且必须初始化。

const PI = 3.14;

let和const属于局部变量,不会出现变量提升的情况,全局定义的let和const变量,不属于顶层变量,不属于window的属性。

变量

在应用程序中,使用变量来作为值的符号名。变量的名字又叫做标识符,其需要遵守一定的规则。

一个 JavaScript 标识符必须以字母、下划线(_)或者美元符号($)开头;后续的字符也可以是数字(0-9)。因为 JavaScript 语言是区分大小写的,所以字母可以是从“A”到“Z”的大写字母和从“a”到“z”的小写字母。

每一个变量或者值都有其对应的类型,在JavaScript中定义了 8 种数据类型:字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol、对象(Object)、数组(Array)、函数(Function)。

变量声明

可以使用关键词 var 。例如 var x = 42。这个语法可以用来声明局部变量和全局变量。也可以直接赋值。例如x = 42。在函数外使用这种形式赋值,会产生一个全局变量。在严格模式下会产生错误。因此你不应该使用这种方式来声明变量。或者使用关键词 let 。例如 let y = 13。这个语法可以用来声明块作用域的局部变量。

可以使用解构赋值将对象字面量的属性绑定到变量。就像这样let { bar } = foo。这会创建一个名为bar的变量,并且将foo对像中属性名与之相同的属性的值赋给它。

var x;               // x 为 undefined
var x = 5;           // 现在 x 为数字
var x = "John";      // 现在 x 为字符串
var x = null;        // 现在 x 为 null
var x = true;        // 现在 x 为 布尔
变量求值

在弱类型的语言中,不同类型的变量或值可进行一些运算,这主要是因为解释器做了隐式类型转换的工作。

如果是字符串和数字的运算,在进行加运算时,会将数字转换成字符串,然后和另一个字符串进行拼接。

var num1 = '123' 
var num2 = 12 
var num3 = num1 + num2 
console.log(num3) // 预期输出:'12312'

在进行减、乘、除运算,以及大小比较时,会将字符串转换成数字,再和另一个数字进行运算或比较。

var num1 = '123' 
var num2 = 12 
var num3 = num1 - num2 
console.log(num3) // 预期输出:111 

var num1 = '123' 
var num2 = 12 
var num3 = num1 * num2 
console.log(num3) // 预期输出:1476 

var num1 = '123' 
var num2 = 12 
var num3 = num1 / num2 
console.log(num3) // 预期输出:10.25 

var num1 = '123' 
var num2 = 15 
var t = num1 > num2 
console.log(t) // 预期输出:true 

如果undefined类型和数字的运算,undefined 值会被转换为 NaN。

var a;
a + 2;    // 计算为 NaN

如果是将各种值转换成布尔值,那么数字0,空字符串"",null,undefined 转成布尔值的时候都是false。非0数字,非空字符串,任何数组(即使是空数组),任何对象(即使是空对象) 转成布尔值的时候都是true。

var a = 0 
if (a) { 
    console.log('hello') 
} else { 
    console.log('world') 
} 
// 当a=0或""或null或undefined的时候,预期输出:world 
// 当a=[]或空对象的时候,预期输出:hello 
// 当a=-1或"abc"时候,预期输出:hello
变量提升

JavaScript 变量的另一个不同寻常的地方是,你可以先使用变量稍后再声明变量而不会引发异常。这一概念称为变量提升;JavaScript 变量感觉上是被“提升”或移到了函数或语句的最前面。但是,提升后的变量将返回 undefined 值。因此在使用或引用某个变量之后进行声明和初始化操作,这个被提升的变量仍将返回 undefined 值。

console.log(x === undefined); // true
var x = 3;
常量

可以用关键字 const 创建一个只读的常量。常量标识符的命名规则和变量相同:必须以字母、下划线(_)或美元符号($)开头并可以包含有字母、数字或下划线。

常量不可以通过重新赋值改变其值,也不可以在代码运行时重新声明。它必须被初始化为某个值。

常量的作用域规则与 let 块级作用域变量相同。若省略const关键字,则该标识符将被视为变量。

// 这会造成错误
function f() {};
const f = 5;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不负韶华ღ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值