你不知道的javaScript笔记(6)
语法
语句表达式
句子是完整表达某个意思的一组词,由一个或多个短语组成,他们之间由标点符号或者连接词连接起来。
语句相当于句子,表达式相当于短语,运算符则相当于标点符号和连接词。
JavaScript 中表达式可以返回一个结果值。
var a = 3 * 6;
var b = a;
b;
var a = 3 * 6; var b = a; 声明语句,因为它声明了语句
a = 3 * 6; b = a; 表达式语句
语句的结果值
表达式的副作用
var a = 42;
var b = a++;
a; // 43
b; // 42
a++ 首先返回变量 a 的当前值 42 (在将值赋给b),然后将 a 的值加 1;
++ 在前面时,如++a, 它的副作用将(a递增)产生在表达式返回结果之前而 a++ 的副作用则产生在之后。
++a++ 会产生 ReferenceError错误
var a = 42;
var b = (a++);
a; // 43
b; // 42
可以使用语句系列运算符将多个独立的表达式语句串联成一个语句:
var a = 42,b;
b = (a++,a)
a; // 43
b; // 43
delete 运算符用来删除对象中属性和数组中的元素。
var obj = {
a:42
};
obj.a; // 42
delete obj.a; // true
obj.a; // undefined
function vowels(str){
var matches;
if(str) {
// 提取所有元音字母
matches = str.match(/[aeiou]/g);
if(matches) {
return matches;
}
}
}
vowels("Hello World"); // ["e","o","o"]
利用赋值语句的副作用将两个if 语句合二为一
function vomels (str){
var matches;
// 提取所有元素字母
if(str && (matches = str.match(/[aeiou]/g))){
return matches;
}
}
vowels("Hello World"); // ["e","o","o"]
上下文规则
1.大括号
对象常量
// 假定 函数 bar() 已经定义
var a = {
foo: bar()
}
标签
// 假定 函数 bar() 已经定义
{
foo: bar()
}
代码块
[] + {}; // "[object Object]"
{} + []; // 0
对象解构
function getData() {
// ..
return {
a: 42,
b: "foo"
};
}
var { a , b } = getData();
console.log(a,b); // 42 "foo"
{...} 还可以用作函数命名参数的对象解构,方便隐式地对象属性赋值。
function foo({a,b,c}){
// 不在需要这样:
// var a = obj.a, b = obj.b, c = obj.c
console.log(a,b,c)
}
foo({
c: [1,2,3],
a: 42,
b:"foo"
}); // 42 "foo" [1,2,3]
运算符优先级
var a = 42;
var b = "foo";
a && b; // "foo"
a || b; // 42
短路
对于 && 和 || 来说,如果从左边的操作数能够得出结果,就可以忽略右边的操作数,我们将这种现象称为短路。
a && b || c ? c || b ? a : c && b : a
因为 && 运算符的优先级高于 ||, 而 || 的优先级又高于 ? :。
(a && b || c) ? (c || b) ? a : (c && b) : a
关联
运算符的关联不是从左到右就是从右到左,这取决于组合是从左开始还是从右开始。
var a = foo() && bar();
先执行 foo() 遵循从左到右的执行循序
var a , b , c;
a = b = c = 42;
实际上是这样处理的 a = (b = ( c = 42))
var a = 42;
var b = "foo";
var c = false;
var d = a && b || c ? c || b ? a : c && b : a;
d; // 42
((a && b) || c) ? ((c || b) ? a : (c && b)) : a
现在来逐一执行
1.(a && b) 结果为 “foo”.
2."foo" || c 结果为 “foo”.
3,第一个 ? 中 “foo” 为真。
4.(c || b) 结果为 "foo".
5.第二个 ? 中, “foo” 为真值。
6.a 的值为 42
错误
在编译阶段发生错误叫做早期错误,语法错误是早期错误的一种,使用 try..catch来捕获
语法错误浏览器一般报 SyntaxError
提前使用变量
暂时性死区 TDZ
let 作用域块
{
a = 2; // ReferenceError
let a;
}
函数参数
function foo(a = 42, b = a + 1 ){
console.log(a,b)
}
foo(); // 42 43
foo(undefined); // 42 43
foo(5); // 5 6
foo(void 0, 7); // 42 7
foo(null ) // null 1
try.. finally
finally中的代码总会在try 之后执行,如果有catch 的话则在catch 之后执行。
可以将finally 中的代码看做一个回调函数,总是在最后一个执行。
switch
可以把它看做 if..else if.. else 的简化版。
switch (a) {
case 2:
// 执行一些代码
back;
case 42:
// 执行一些代码
back;
default:
// 执行一些代码
}
混合环境 JavaScript
动态创建script,标签,将其加入到页面的DOM 中。
var greeting = "Hello World";
var el = document.createElement("script");
el.text = "function foo(){ alert(greeting); setTimeout(foo,1000)}";
document.body.appendChild(el);
如果将el.src 的值设置为 URL,就可通过<script src="">
保留字:
保留字不能将它用作变量名: 保留字有四类:
“关键字” “预留关键字” “null 常量” “true/false”
你不知道的javaScript笔记(6)的更多相关文章
- 你不知道的JavaScript笔记----对象
对象: 1.定义对象属性 属性描述符(也称为:数据描述符) Object.defineProperty(Object,PropertyName,{ value: 6, writable: true, ...
- 你不知道的javaScript笔记(7)
异步:现在与将来 分块的程序 可以把JavaScript 程序写在单独的js 文件中,这个程序是由多个块组成的,这些块 中只有一个是现在执行,其余在捡来执行,最常见的块单位是函数. 例如: funct ...
- 你不知道的javaScript笔记(5)
原生函数 常用的原生函数 String() Number() Boolean() Array() Object() Function() RegExp() Date() Error() Symbol( ...
- 你不知道的javaScript笔记(4)
类型: JavaScript 有7种内置类型 空值 (null) 未定义(undefined) 布尔值(boolean) 数字(number) 字符串(string) 对象(object) 符号(sy ...
- 你不知道的javaScript笔记(3)
对象 对象可以通过两种形式定义: 声明形式和构造形式 声明形式语法: var myObj = {key:value} 构造形式语法: var myObj = new Object(); myObj.k ...
- 你不知道的javaScript笔记(2)
this和对象原型 this是一个很特别的关键字,被自动定义在所有函数的作用域中 // foo.count 是0,字面理解是错误的 function foo(num) { console.log(&q ...
- 你不知道的javaScript笔记(1)
规避冲突 function foo(){ function bar(a){ i = 3; console.log(a + i); } for ( var i=0; i < 10; i++){ b ...
- 你不知道的Javascript(上卷)读书笔记之一 ---- 作用域
你不知道的Javascript(上卷)这本书在我看来是一本还不错的书籍,这本书用比较简洁的语言来描述Js的那些"坑",在这里写一些博客记录一下笔记以便消化吸收. 1 编译原理 在此 ...
- 你不知道的JavaScript上卷笔记
你不知道的JavaScript上卷笔记 前言 You don't know JavaScript是github上一个系列文章 初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目 ...
随机推荐
- 针对在webview模式中,小米魅族手机不支持html5原生video的control的解决办法![原创]
其实,解决办法就是,重新写个control控制功能,.同样用流行的video.js可以实现 第一步就是增加个播放的图片..要不然没有按钮多难看! <div class="videoDi ...
- JavaWeb技术
1.简介 Java Web是用Java技术来解决相关web互联网领域的技术总和.web包括:web服务器和web客户端两部分.Java在客户端的应用有java applet,不过使用得很少,Java在 ...
- PAT 1056 Mice and Rice
#include <cstdio> #include <climits> #include <cstdlib> #include <vector> #i ...
- Python 动态加载 Extension Manager Classes
看着看着发现了一个库:stevedore(http://stevedore.readthedocs.org/en/latest/managers.html),但是感觉文档做得不行啊,都没个tutori ...
- angular1结合webpack构建工具
目录结构 webpack.config.js const { resolve } = require('path') const webpack = require('webpack') const ...
- 原生js实现星星闪烁的效果
星星闪烁的原理其实很简单: html代码: <body style="background:#000"> <div id="stars_box" ...
- MySQL查询笔试综合题练习
题目要求: 在某个数据库下建表: create table stu( -> name char(3) not null default '', -> subject varchar(10) ...
- LDA概率图模型之贝叶斯理解
贝叶斯.概率分布与机器学习 转自:http://www.cnblogs.com/LeftNotEasy/archive/2010/09/27/1837163.html 本文由LeftNotEasy原 ...
- Tomcat 数据源的原理、配置、使用
1.数据源的作用及操作原理 在程序代码中使用数据源是可以提升操作性能的,这种性能的提升依靠于运行的原理. 传统JDBC操作步骤 1.加载数据库驱动程序,数据库驱动程序通过CLASSPATH配置: 2. ...
- django-1-应用开发基本套路
Django 开发基本流程 创建项目 创建应用 修改配置文件 设计数据模型 后台管理注册 编写业务视图 编写模板文件 设置URL 访问测试/调试 部署上线 创建项目 django-admin star ...