你不知道的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上一个系列文章 初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目 ...
随机推荐
- python爬虫学习(一)
#简单例子:抓取网页全部内容后,根据正则表达式,获取符合条件的字符串列表from urllib import request#正则表达式import re url = "http://www ...
- Vue element-ui:滚动条 分页 禁用选项
1.滚动条设置: <el-scrollbar style="height:100%;">.......</el-scrollbar> 默认会同时出现水平和垂 ...
- null 和 undefined 区别
---恢复内容开始--- 1.在javascipt中,将一个变量赋值为undefined 或 null ,几乎没什么区别. 2. 在if语句中undefined 和 null 都会被自动转成fals ...
- C语言腾讯课堂(一)
腾讯课堂:c语言从零到精通 1. 从第一个例子开始 #include <stdio.h> int main(void) { printf("hello, qin men \n&q ...
- SharePoint Designer - View
1. 数据视图 可以将图片.新闻等列表(如: Announcement)用以下视图显示,具体做法可以参考这篇文章,但需要强调几个地方: 1.1 选择了视图样式后,需要点击“自定义” --> &q ...
- QTablewidget 简单例子
[1]QTableWidget简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件. 学习QTableWidget就要首先看看QTableView控件(控件也是有”家世“的!就像研 ...
- 64位系统中连接Access数据库文件的一个问题
近日在windows 7 64位系统中编译以前写的程序,发现在连接Access数据库时总是出现异常,提示“Microsoft.Jet.OLEDB.4.0”未在本机注册,同样的代码在32位的xp系统中却 ...
- OFFICE_EXCEL_Combine text from two or more cells into one cell.
Excel Enter and format data Layout Combine text from two or more cells into one cell Combine t ...
- VSCode-python 进阶配置
VSCode-python 进阶配置 中文乱码 中文乱码,网上一堆解决方法,但是根本没有有效起作用的. 在python脚本的前面添加: # -*- coding:utf-8 -*- 并不能在控制台输出 ...
- adb工具包究竟能帮我们做什么?
adb工具包主要作用于什么呢?应该有很多用户都不了解adb,那就一起来了解一下吧!adb的全称为Android Debug Bridge,就是起到调试桥的作用. 借助adb工具,我们可以管理设备或手机 ...