入门与进阶第二三章
来源:互联网 发布:产品说明书排版软件 编辑:程序博客网 时间:2024/06/06 18:58
进入JavaScript
值与类型
-可用的内建类型
-string、number、boolean
-null和undefined、object、symbol(ES6新增类型)
-typeof a-->询问a中的值的类型-->typeof null-->”object”
对象
-object-->一种复合值,可以设定属性
-点号标记法(obj.a)-->易读,首选
-方括号标记法(obj[“a”])-->属性(键)名称含有特殊字符-->变量或string字面量
var obj= {
a:"helloworld",
b:42
};
var b="a";
obj[b]; // "helloworld"
obj["b"]; // 42
-数组和函数-->object类型的特化版本
数组
-一个数组-->一个objectà使用数字索引的位置
var arr = [
"hello world",
42,
true
];
arr[0]; // "hello world"
arr[1]; // 42
arr[2]; // true
arr.length; // 3
typeof arr; // "object"
函数
-object的子类型-->”function”
function foo() {
return42;
}
foo.bar ="hello world";
typeof foo; // "function"
typeof foo(); // "number"
typeof foo.bar; // "string"
内建内型的方法
-基本类型值-->”封箱”为对应的对象包装器(操作隐藏在幕后)
值的比较
-强制转换-->明确的/隐含的
-falsy-->””/0,-0,NaN/null,undefined/false
-truthy-->其他(数组,对象,函数…)
-等价性
-==和===-->==允许强制转换条件下检查值的等价性(===不允许,严格等价)
-比较值中有true/false,0/””/[]-->用===
-非基本类型值(object…)-->简单的检查引用(array会默认用逗号强转为string)
var a = [1,2,3];
var b = [1,2,3];
var c ="1,2,3";
a == c; // true
b == c; // true
a == b; // false
-不等价性
-关系比较-->NaN不大于不小于不等于一切数字值
变量
-变量名-->合法的标识符(保留字)
函数作用域
-var变量-->属于当前的函数作用域(顶层-->全局作用域)
-提升-->var的声明作用于整个作用域,作用域任何位置可以访问(函数常用)
-嵌套的作用域
-let-->声明属于个别块的变量
条件
-if、switch、条件操作符(三元操作符)
Strict模式
-收紧了一些特定行为的规则-->更安全合理、更强的可优化性
-“use strict”;-->不允许省略var进行的隐含自动全局变量声明
函数作为值
-匿名函数表达式/命名函数表达式
-立即被调用的函数表达式(IIFE)
(functionIIFE(){
console.log( "Hello!" );
})();
// "Hello!"
-经常用于定于变量-->不会影响IIFE外面的代码
闭包
-即使函数已经完成了运行,它依然可以“记住”并持续访问函数的作用域
functionmakeAdder(x) {
// 参数 `x` 是一个内部变量
// 内部函数 `add()` 使用 `x`,所以它对 `x` 拥有一个“闭包”
functionadd(y) {
return y + x;
};
return add;
}
// `plusOne` 得到一个指向内部函数 `add(..)` 的引用,
// `add()` 函数拥有对外部 `makeAdder(..)` 的参数 `x`
// 的闭包
var plusOne =makeAdder( 1 );
// `plusTen` 得到一个指向内部函数 `add(..)` 的引用,
// `add()` 函数拥有对外部 `makeAdder(..)` 的参数 `x`
// 的闭包
var plusTen =makeAdder( 10 );
plusOne( 3 ); // 4 <-- 1 + 3
plusOne( 41 ); // 42 <-- 1 + 41
plusTen( 13 ); // 23 <-- 10 + 13
-模块-->定义对外界不可见的私有实现细节(变量,函数)和对外可访问的公用API
this标识符
-this不是指函数本身
functionfoo() {
console.log( this.bar );
}
var bar ="global";
var obj1 = {
bar:"obj1",
foo: foo
};
var obj2 = {
bar:"obj2"
};
// --------
foo(); // "global"
obj1.foo(); // "obj1"
foo.call( obj2 ); // "obj2"
newfoo(); // undefined
原形
var foo = {
a:42
};
// 创建 `bar` 并将它链接到 `foo`
var bar =Object.create( foo );
bar.b ="hello world";
bar.b; // "hello world"
bar.a; // 42 <-- 委托到 `foo`
旧的和新的
-填补Polyfilling 唯一与自己不相等的值-->NaN
-转译transpiling 唯一不能作为参数默认值的明确传递的值-->undefined
非JavaScript
-很大一部分代码不是直接javaScript控制的
-DOM API
-document、getElementById()、alert()、console.log()、、、
第三章:进入YDKJS
作用域和闭包
-JS是“解释型语言”因此是不被编译的-->错误
-JS引擎在你的代码执行的前一刻(有时是在执行期间)编译它
this和对象原型
-this指代它所出现的函数-->错误
-this根据函数如何被执行而动态绑定
-对象原型属性-->”行为委托”
类型和文法
-类型强制转换-->应当在代码中使用的
异步与性能
-回调-->开启异步的主要方法(两个不足之处)
-控制反转(IoC)信任丢失
-缺乏线性的可推理性
-ES6引入两种新的机制(模式)
-promise
-generator
ES和未来
-解构,参数默认值,symbol,简洁方法,计算属性,箭头函数,块儿作用域,promise,generator,iterator,模块,代理,weakmap、、、
-学习JavaScript不是一个最终目标,而是一个过程。
- 入门与进阶第二三章
- python3入门与进阶(三)
- 【Ogre编程入门与进阶】第二章 Ogre相关知识回顾
- Wireshark入门与进阶系列三之远程抓包
- mongo db 入门进阶 第二章:命令使用
- C#入门经典第二,三章
- Geronimo入门与进阶
- SmartGWT 入门与进阶
- sbt入门与进阶
- TTS入门与进阶
- Git入门与进阶
- 入门与进阶第一章
- 第二章 ZeroMQ进阶
- Java进阶学习第二天——CCS与JS入门
- 第二章 创建对话框(信号与槽进阶)
- 进阶篇,第二章:MC与Forge的Event系统
- 第二章:Spark下载与入门
- 《Red5 用户参考手册》之三:入门第二章 配置文件
- UIWebView 普通字符串转化为标准HTML字符串
- 马东经典语录
- Banner无限轮播
- 【线段树】Laoj1299
- Java通过_id查询mongodb数据库
- 入门与进阶第二三章
- 简易版log三秒跳转
- C中输入函数的理解 -- getchar和scanf
- 51nod 1199 Money out of Thin Air[线段树]
- vue2.0使用(一)
- 3.Spring Cloud:服务消费(Ribbon)【Dalston版】
- spark深度学习例子音乐推荐代码
- Windows2008 r2显示桌面上的通用图标(计算机、网络)
- Web容器中DefaultServlet详解