JavaScript基本特性

JavaScript基本特性:
大小写敏感:
var avar A不同
Objectobject不同
functionFunction不同
 
空格:大部分空格没有实际意义
var a = 1var a=1没有区别
加回车大部分时候也不会影响代码
[注:只有一个地方不能加回车,此处为return后面]
 
 
 
表达式 与 语句
表达式一般都有值,语句可能有也可能没有
语句一般会改变环境(声明、赋值)
 
语句
 
JS的执行单位为(line),也就是一行一行地执行。一般情况下,每一行就是一个语句。
 
语句(statement)是为了完成某种任务而进行的操作,比如下面就是一行赋值语句。
var a = 1+3; 这条语句先用var命令,声明了变量a,然后将1 + 3的运算结果赋值给变量a。
 
语句以分号结尾,一个分号就表示一个语句结束。多个语句可以写在一行内。
var a=1+3;var b="abc";
 
分号前面可以没有任何内容,JavaScript引擎将其视为空语句。
;;; //表示3个空语句
 
少写无意义语句  "abc";(js引擎认为是语句但是没有任何意义)
 
 
表达式
 
1+ 3叫做表达式(expression),指一个为了得到返回值的计算式
 
? :
表达式1 ? 表达式2 : 表达式3
 
凡是JavaScript语言中预期为值的地方,都可以使用表达式。比如,赋值语句的等号右边,预期是一个值,因此可以放置各种表达式。一条语句可以包含多个表达式。
 
语句和表达式的区别:前者主要为了进行某种操作,一般情况下不需要返回值;后者则是为了得到返回值,一定会返回一个值。
 
表达式不需要分号结尾。一旦在表达式后面添加分号,则JavaScript引擎就将表达式视为语句,这样会产生一些没有任何意义的语句。
1 + 3; "abc"; 上面两行语句有返回值,但是没有任何意义,因为只是返回一个单纯的值,没有任何其他操作。
 
 
 
 
 
变量
 
变量概念:对"值"引用,建立变量与值的引用关系,包括传值引用和传址引用。
      
 
 
变量概念:
变量是对“值”的引用,使用变量等同于引用一个值(建立变量与值的引用关系,包括传值引用 和 传址引用)。每一个变量都有一个变量名。
 
内存层面理解:变量空间(没声明一个变量相当于开辟一个内存空间)
最通俗的理解:用来存储一些可以变化的数据。
var a = 1; 先声明变量a,然后在变量a与数值1之间建立引用关系,也称将数值1“赋值”给变量a 以后,引用变量a就会得到数值1 最前面的var,是变量声明命令。它表示通知解释引擎,要创建一个变量a。
 
 
变量的声明和赋值,是分开的两个步骤,上面的代码将它们合在了一起
var a; a = 1;
 
如果只是声明变量而没有赋值,则该变量的值为undefined。
var a; a // undefined 是个特殊值,表示未定义
 
 
如果一个变量没有声明就直接使用,JavaScript会报错,告诉你变量未定义
x // ReferenceError: x is not defined //直接使用变量x,系统就报错,告诉你变量x没有声明。 忘记声明只赋值问题:  不自觉创建全局变量;js严格模式下会报错;
 
 
允许省略var,直接对未声明的变量赋值。也就是说,var a = 1与a = 1,这两条语句的效果相同。但是由于这样的做法很容易不知不觉地创建全局变量(尤其是在函数内部),所以建议总是使用var命令声明变量
 
严格地说,var a = 1 与 a = 1,这两条语句的效果不完全一样,主要体现在delete命令无法删除前者。不过,绝大多数情况下,这种差异是可以忽略的。
 
delete可删window对象的a属性,但是不能删var命令声明的全局变量
 
js语法中全局变量最大缺点是对任何一个代码块都是可读可写的,这对实现特定功能代码的模块化和重复使用非常不利(语言在最初设计时没有考虑太多,会有很多不合理的地方)。
 
 
 
在同一条var命令中声明多个变量
var a, b;
 
 
JS是一种动态类型语言,弱类型语言,也就是说,变量的类型没有限制,可以赋予各种类型的值。
var a = 1; a = "hello"; 变量a起先被赋值为一个数值,后来又被重新赋值为一个字符串。 第二次赋值的时候,因为变量a已经存在,所以不需要使用var命令
 
 
如果使用var重新声明一个已经存在的变量,是无效的。
var x = 1; var x; x // 1 变量x声明了两次,第二次声明是无效的 ------------------------------------------------------------------- 如果第二次声明的同时还赋值了,则会覆盖掉前面的值。 var x = 1; var x = 2; // 等同于 var x = 1; var x; x = 2; 两次用var命令声明相同的变量,第二次声明并不会新开辟内存空间?【存疑,目前相信阮老师】
 
 
变量提升
 
JS引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)。
  console.log(a);     var a = 1; //undefined 错误的写法,但实际不变报错,因为存在变量提升,真正运行的是下面的代码: var a; console.log(a); a=1; 最后的结果是显示undefined,表示变量a已声明,但还未赋值 ----------------------------------------------------------------------------
 
 
注意,变量提升只对var命令声明的变量有效,如果一个变量不是用var命令声明的,就不会发生变量提升。
console.log(b); b = 1; 语句将会报错,提示“ReferenceError: b is not defined”,即变量b未声明, 这是因为b不是用var命令声明的,JS 引擎不会将其提升,而只是视为对顶层对象的b属性的赋值。
 
 
 
 
 
标识符
 
标识符(identifier)是用来识别具体事物的一个名称(比如:变量名、函数名)。JavaScript语言的标识符对大小写敏感,所以a和A是两个不同的标识符。
 
 
有一套标识符命名规则,js引擎遇非法标识符报错。
 
  不能有+ - * / 连词线 首位不能是数字;
 
     中文可作合法标识符,可为变量名,少用
var 临时变量 = 1; var 你好 = 'hi'
  
 *保留字不作标识符;
    *保留字,关键字,Infinity/NaN/undefined不能作为标识符;
例如合法的标识符 arg0 _tmp $elem π 例如不合法的标识符 1a 23 a+b -d 第一个字符可以是任意Unicode字母,以及美元符号($)和下划线(_)。 后面的字符,还可以用数字。
 
 
保留字,不能用作标识符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。
另外,还有三个词虽然不是保留字,但是因为具有特别含义,也不应该用作标识符:Infinity、NaN、undefined。
 
 
 
 
 
注释 js引擎忽略的部分
单行注//
多行注/**/
 
 
 
 
区块  block ---- 把代码包在一起  
js使用大括号,将多个相关的语句组合在一起,称为“区块”(block)。 { let a = 1 let b = 2 let c = 3 }
 
与大多数编程语言不一样,JS的区块不构成单独的作用域(scope)。也就是说,区块中的变量与区块外的变量,属于同一个作用域。
  {       var a = 1;       console.log(a);//  1     }      console.log(a); //1 区块内部,声明并赋值了变量a,然后在区块外部,变量a依然有效, 这说明区块不构成单独的作用域,与不使用区块的情况没有任何区别 所以,单独使用的区块在JavaScript中意义不大 ------------------------------------------------------------------------ 区块往往用来构成其他更复杂的语法结构,比如for、if、while、functions等
 
 
 
 
*优先采用“严格相等”,而不是相等,从而避免类型自动转换的干扰;
条件语句 if结构 和 switch结构,完成条件判断
1 if 结构 (单向选择)
先判断一个表达式的布尔值,然后根据布尔值的真伪,执行不同的语句。
要求返回值是布尔值,由于js弱类型,这里即使不是布尔js引擎在执行代码时会自动转换)
if (expression) statement (条件)后是一条语句可省略{},多条语句加{}; 注意的是,expression(表达式)必须放在圆括号中,表示对表达式求值。 如果结果为true,就执行紧跟在后面的statement(语句); 如果结果为false,则跳过statement。 -------------------------------------------------------------- if (m === 3) { m += 1; //如果条件为true 成立,就加1,不成立无任何效果 }
 
2.if..else结构 (双向选择) 且用三目运算符也和if 双向一样的效果
if 代码块后面,还跟着一个 else 代码块,表示不满足条件时,所要执行的代码
if (m === 3) { // 满足条件时,执行的语句 } else { // 不满足条件时,执行的语句 } //判断变量m是否等于3,如果等于就执行if代码块,否则执行else代码块。
 
 
3.if..else if..else 结构 (多向向选择) 在双向的基础上增加多个选择分支
对同一个变量进行多次判断时,多个if...else语句可以连写在一起。 if (条件1) { //当条件1为true 时执行的代码 } else if (条件2) { //当条件2为true 时执行的代码 } else if (条件3) { //当条件3为true 时执行的代码 } else { //当条件 1,2,3 都为false 时,需要执行的代码 }
 
else 代码块 总是与自己 最近的那个if语句配对
var m = 1; var n = 2; if (m !== 1) if (n === 2) console.log('hello'); else console.log('world'); 上面的代码不会有任何输出 else 代码块不会得到执行,因为他跟着的是最近的那个if 语句 比如下面这样 --------------------------------------------------------------------------- if (m !== 1) { if (n === 2) { console.log('hello'); } else { console.log('world'); } } ------------------------------------------------------------------------ -如果想让else 代码块 ,跟随最上面的那个if语句 就需改变大括号的位置 if (m !== 1) { if (n === 2) { console.log('hello'); } } else { console.log('world'); } // world
 
4.if 语句的嵌套
if(条件1){ if(条件2){ 当条件1 和 条件2 都为true 时执行的代码 }else{ 当条件1为true ,条件2为false 时执行的代码 } } else { if(条件2) { 当条件1为false ,条件2为true 时执行的代码 } else { 当条件1,和 条件2 都为false时执行的代码 } }


posted @ 2020-12-13 17:36  沁莹  阅读(432)  评论(0)    收藏  举报