原 2017/5 JavaScript基础5--- 语句、严格模式

语句:javascrit程序由语句组成,语句遵守特定的语法规则。例如:if语句,while 语句,with语句

一、block 块

块语句常用于组合 0~多个语句。块语句用一对花括号定义

1、语法:

{
   语句1; 
   语句2;
}

通常与 if 、while结合使用

if(true){
  console.log("hi")
}

2、没有块级作用域

1)在for循环完成之后,在外面同样也可以访问。

for(var i =0 ; i<10 ; i++){  //i虽然声明在for里面但在外面也可以访问
   var str = "hi";
   console.log(str);
}
var i=0;
for( ; i<10;i++){
  var str = "hi";
  console.log(str);
}
//此种写法同上面作用相同

2)函数作用域

function foo(){
  var a = 1;
  console.log(a); //1
}

foo();
console.log( typeof a) ; //undefined 不可以访问

3、声明语句

1)var  a = b =1;

当使用  var  a = b =1; 确实创建了两个变量并一个且赋值为1,但是 b 是隐式的创建了全局变量。

function foo(){
  var a = b = 1;  
} 

foo();
console.log(typeof a) ; //"undefined"
consloe.log(typeof b) ; // number  b为全局变量

2) 在一条语句中声明多个变量

var a =1 ,b =1;

二、try - catch 语句

1、 try -catch形式

  1. try  -- catch
  2. try -- finally
  3. try --catch -- finally

try 后面一定要接一个catch() 或 finally

try{
  throw "test";
}catch(ex){  //抛出异常时执行
  console.log(ex); // test
}finally{  //最后一定会执行
  console.log('finally')
}

2、 try -catch 嵌套

1)嵌套1

try2 抛出一个异常  "opps",在try2 里面没有catch,所以会跳出寻找最近的catch,但会先执行finally

try{
/************try2***************/
  try{
      throw new Error("opps");
  }finally{
      console.log("finally");
  }
/*****************************/

}catch(ex){
  console.error("outer" , ex.message);
}

finally

outer opps

2)嵌套2

try{
/************try2****************/
  try{
    throw new Error("oops");
  }catch(ex){
    console.error("inner",ex.message);
  }finally{
    console.log("finally)
  }

/************try2****************/

}catch(ex){
  console.error("outer" , ex.message);
}

里面抛出一个异常,在里面直接处理

inner  oops

finally

如果里面的异常没有处理抛出了,则在外部处理异常之前,会先处理内部 finally语句

二、函数 switch,循环

1、function

1) 函数声明:

function fd(){
  //do sth
  return
}

2) 函数表达式:

var fe = function(){
  //do sth
 
} 

3)区别

函数声明会被预先处理,函数前置

//正确
fd()
function fd(){
  //do sth
  return
}

函数表达式不可以在声明前调用

//错误
fe(); TypeError
var fe = function(){
  //do sth
 
} 

2、 for ... in语句 

var p;
var obj = { x: 1, y:2}

for(p in obj){}
var obj = {a:1,b:2,c:3}
for( var prop in obj){
console.log("obj." + prop + "=" +obj[prop])
}

/*********Output************/
obj.a=1
obj.b=2
obj.c=3

循环遍历对象属性 

  1. 顺序不确定。具体顺序依赖于引擎实现
  2. 属描述器,eneumerable 为 false 时 不会出现
  3. for in对象  属性 受原型链影响,如果 obj原型链上的原型,拥有的其他属性,eneumerable为true时也会出现

3、switch  

var val = 2;
switch(val){
  case 1:
   console.log(1); break;
  case 2:
   console.log(2); break;
  default:
   console.log(0); break;
}

结果输出2

也可以多个条件执行一个语句

var val = 2;
switch(val){
  case 1:
  case 2:
   console.log(1,2); break;
  default:
   console.log(0); break;
}

 3、with

with语句可以修改当前作用域(不建议使用)

with({x:1}){
  console.log(x);
}

//在with语句中可以直接使用 x输出1,不用对象.x

三、严格模式

严格模式是一种特殊的执行模式,它修复了部分语言上的不足,提供了更强的错误检查,并增强安全性

1、使用方法

function func(){
  'use strict'; //严格模式
}

或可以在js文件前使用  'use strict' ,整个文件严格模式

2、严格模式下要求

  1. 不允许用 with 
  2. 不允许未声明的变量被赋值。 报错 ReferenceError
  3. arguments 变为参数的静态副本
  4. delete 参数 、函数名 报错 syntaxError(语法错误)
  5. delete 不可配置属性 :configurable :false 报错 TypeError
  6. 对象字面量重复属性名报错 var obj = { x:1 , x:2}报错 syntaxError(语法错误)
  7. 禁止八进制自变量普通模式下 console.log(0123) ---83, 严格模式下报错 syntaxError(语法错误)
  8. eval ,arguments 变为关键字,不能作为变量、函数名syntaxError(语法错误)
  9. eval变为独立作用域

转载于:https://my.oschina.net/u/2991733/blog/899284

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值