1、block

一般就是{}包括起来的代码块,注意的是,js没有块作用域,但是有函数作用域,全局作用域。

2、var

1
var a = b = 1; 

如:

1
2
3
4
5
6
function () {
var a = b = 1;
}
foo();
console.log(typeof a); // "undefined"
console.log(typeof b); // "number" b为全局变量

3、try catch

1
2
3
4
5
6
7
try {
throw "test";
} catch(ex) {
console.log(ex); // "test"
} finally {
console.log("finally"); // finally
}

4、function

function fd() { // do something }; // 函数声明

var fe = function { // do something }; // 函数表达式

区别:函数声明可以在声明前调用,且无报错;而函数表达式不可以在声明前调用,有TypeError

5、for…in

1
2
3
4
5
var p;
var obj = {x:1, y:2};
for(p in obj) {
// 获取obj的key值
}

有几点需要注意:

  • 顺序不确定
  • enumerable为false时不显示
  • for…in 对象属性受到原型链的影响

6、严格模式

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

1
2
3
4
5
6
7
8
9
10
11
12
// 1.
function func() {
// ps:ie 不认该模式,会自动忽略严格模式
// 方法func按照严格模式执行
;
}大专栏  JavaScript之三 - 语法an> // 2.
"use strict" // 按照严格模式来
function func() { }

严格模式:

  • 不允许使用with(SyntaxError);
  • 不允许给未声明的变量赋值(RefrenceError);
  • arguments变为参数的静态变量;
1
2
3
4
5
6
7
8
9
10
11
// 正常状态下
!function(a) {
// "use strict";
arguments[0] = 100;
console.log(a);
}(1);
// ps: 若有传参的话,则arguments[0]可以改变a的值,即a的值为100,
// 若不传参,即!function(a){}();则无论是否有arguments的赋值,a都是为undefined
// 严格模式:
// 1) 值传递:传参则1,无传参则undefined
// 2) 址传递:若在无传参的情况下赋值则会报错
  • 严格模式下删除形参会报错(1.configurable为true则报SyntaxError;2.configurable为false则报TypeError);
  • 对象字面量属性重复报错。var obj = {x:1, x:2}; // SyntaxError
  • 禁止八进制字面量 console.log(0123); //SyntaxError
  • eval, arguments变为关键字,不能作为变量、函数名,若违反则报SyntaxError
  • eval独立作用域
1
2
3
4
5
6
7
8
9
10
!function() {
eval("val evalValue = 2;");
console.log(typeof evalValue);//number
}(); !function() {
;
eval("var evalValue = 2;");
console.log(typeof evalValue);//undefined,原因是eval独立作用域
}

严格模式总结:

  1. 不允许使用with;
  2. 所有变量必须声明,赋值给未声明的变量报错,而不是隐式创建全局变量;
  3. eval中的代码不能创建eval所在的作用域变量、函数,而是为eval单独创建一个单独的作用域,并在eval返回时废弃;
  4. 函数中的特殊对象arguments是静态副本,而不像非严格模式那样,修改arguments或修改形参会相互影响;
  5. 删除configurable为false会报错,而不是选择忽略;
  6. 禁止八进制字面量;
  7. eval、arguments为关键字,不能作为变量名或函数名;
  8. 一般函数的调用(不是对象方法的调用,也不是用apply/call/bind等修改this指向),this指向null而不是全局对象;
  9. 若使用apply/call,当传入null或者undefined时,this指向null或undefined而不是全局对象;
  10. 试图修改不可写属性(writable=false),在不可扩展的对象上添加属性时报TypeError,而不是忽略;
  11. arguments.caller、arguments.callee被禁用

JavaScript之三 - 语法的更多相关文章

  1. JavaScript基本语法(一)

    前段时间学习了HTML和CSS,也实战了一些结构较简单的项目.在还没运用到JS的知识时,做出来的效果总觉得少了些什么.虽然总体布局与一些基本的特效,也能用HTML+CSS就能完成.但如今开始进入Jav ...

  2. javascript运算符语法概述

    × 目录 [1]个数 [2]优先级 [3]结合性[4]类型[5]规则表 前面的话 javascript中的运算符大多由标点符号表示,少数由关键字表示,它们的语法言简意赅,它们的数量却着实不少.运算符始 ...

  3. javascript基础语法——表达式

    × 目录 [1]原始表达式 [2]复杂表达式 前面的话 一般地,关于javascript基础语法,人们听得比较多的术语是操作符和语句.但是,其实还有一个术语经常使用,却很少被提到,这就是javascr ...

  4. javascript基础语法——词法结构

    × 目录 [1]java [2]定义 [3]大小写[4]保留字[5]注释[6]空白[7]分号 前面的话 javascript是一门简单的语言,也是一门复杂的语言.说它简单,是因为学会使用它只需片刻功夫 ...

  5. JavaScript的语法规则

    JavaScript的语法规则 JavaScript区分大小写 JavaScript脚本程序须嵌入在HTML文件中 JavaScript脚本程序中不能包含HTML标记代码 每行写一条脚本语句 语句末尾 ...

  6. JavaScript的语法要点 1 - Lexically Scoped Language

    作为从一开始接触C.C++.C#的程序员而言,JavaScript的语法对我来说有些古怪,通过最近一年的接触,对它有了一定的了解,于是想把它的一些语法要点记录下来. 1. Block Scope vs ...

  7. javascript的语法作用域你真的懂了吗

    原文:javascript的语法作用域你真的懂了吗 有段时间没有更新了,思绪一下子有点转不过来.正应了一句古话“一天不读书,无人看得出:一周不读书,开始会爆粗:一月不读书,智商输给猪.”.再加上周五晚 ...

  8. 【repost】JavaScript 基本语法

    JavaScript 基本语法,JavaScript 引用类型, JavaScript 面向对象程序设计.函数表达式和异步编程 三篇笔记是对<JavaScript 高级程序设计>和 < ...

  9. JavaScript 中语法规范及调试

    JavaScript 中语法规范及调试 版权声明:未经博主授权,内容严禁分享转载 JavaScript 开发环境 JavaScript 脚本可以使用任意一款纯文本编辑器进行编程开发. 常见的前端开发编 ...

随机推荐

  1. Codeforces Round #573 (Div. 1) 差F

    Codeforces Round #573 (Div. 1) E 题意:二维平面上有 n 个点,你可以放至多 m 条直线使得 (0,0) 与每个点的连线至少与一条直线相交.求原点与所有直线的距离最小值 ...

  2. 实现TabControl 选项卡首个标签缩进的方法

    借用一张网图说明需求 在网上找了一圈,没有找到直接通过API或者重绘TabControl 的解决方法,最后灵机一动想到了一个折(tou)中(lan)的解决办法 Tab1.TabPages.Clear( ...

  3. Qt的窗口如何显示在spi屏幕上

    问题:我们可以将qt移植到H3上,但是如果要将窗口通过spi屏进行显示应该怎么做呢,和framebuffer又有什么关系? 这里只说一下qt在spi屏上显示的技术原理,具体的实现还需要自己努力. 一. ...

  4. framebuffer 知识点

    设备文件是在/dev/目录下设备文件有主设备号,次设备号.当操作设备文件, 系统会根据设备文件的设备号找到相应的设备驱动(驱动在内核注册时已指定使用的设备号),并调用相应的功能.  open ---& ...

  5. UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释(转)

    layoutSubviews总结 ios layout机制相关方法 - (CGSize)sizeThatFits:(CGSize)size- (void)sizeToFit——————- - (voi ...

  6. iMX6Q/PLUS开发板烧写设备树内核的Ubuntu系统

    基于迅为-iMX6D.iMX6Q 和 iMX6PLUS 三个硬件版本,设备树镜像的烧写方法以及镜像所在目录,镜像名称全部一致,所以作者将烧写章节合并到一起. 请注意,如果购买的是 iMX6D 版本,想 ...

  7. 把Java代码转成c#可用的dll

    1.首先你需要到 IKVM官网 下载IKVM.http://sourceforge.net/projects/ikvm/files/,需要注意的是如果你用的是.net framework2.0,那么最 ...

  8. 项目引入nacos 日志不显示问题

    禁用nacos的日志即可解决 idea当中 添加vm options参数即可 -Dnacos.logging.default.config.enabled=false 打包后的启动命令  java - ...

  9. icloud/onenote/onedrive/microoutlook/百度云账号都是怎么回事(未完成)

    在用一些跨机器跨平台软件的时候,一旦换了电脑或者手机,我经常出现蒙的状态,不知道怎么同步或者使用了,在这里总结一下. 一.icloud账号 当我们买iphone或者macbook的时候,一开机它会让你 ...

  10. 基于Python的Flask基础知识

    Flask简介 Flask 是一个使用 Python 编写的轻量级 Web 应用程序框架.Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask. 下面我们简单 ...