
js基础
张玉景
仪式感就是使某一天与其他日子不同
使某一时刻与其他时刻不同
展开
-
js基本语法
switch结构当多个if。。。else连在一起使用的时候,转为switchswitch(fruit){case "banner"://...break;default://...}原理:上面代码根据变量fruit的值,选择执行相应的case。如果所有case都不符合,则执行最后的default部分。需要注意的是,每个case代码块内部的break语句不能少...原创 2018-11-29 16:06:12 · 90 阅读 · 0 评论 -
函数的声明
JavaScript 有三种声明函数的方法。function 命令function print(s) { console.log(s);}函数表达式除了用function命令声明函数,还可以采用变量赋值的写法。var print = function(s) { console.log(s);};采用函数表达式声明函数时,function命令后面不带有函数名。...原创 2018-12-03 17:40:33 · 165 阅读 · 0 评论 -
圆括号运算符,return 语句和递归
调用函数时,要使用圆括号运算符。圆括号之中,可以加入函数的参数。function add(x, y) { return x + y;}add(1, 1) // 2函数体内部的return语句,表示返回。JavaScript 引擎遇到return语句,就直接返回return后面的那个表达式的值,后面即使还有语句,也不会得到执行。也就是说,return语句所带的那个表达式,就是...原创 2018-12-03 17:49:36 · 523 阅读 · 0 评论 -
第一等公民
JavaScript 语言将函数看作一种值,与其它值(数值、字符串、布尔值等等)地位相同。凡是可以使用值的地方,就能使用函数。比如,可以把函数赋值给变量和对象的属性,也可以当作参数传入其他函数,或者作为函数的结果返回。函数只是一个可以执行的值,此外并无特殊之处。由于函数与其他数据类型地位平等,所以在 JavaScript 语言中又称函数为第一等公民。function add(x, y) ...原创 2018-12-03 17:57:27 · 234 阅读 · 0 评论 -
函数的属性和方法
name 属性函数的name属性返回函数的名字function f1() {}f1.name // "f1"如果是通过变量赋值定义的函数,那么name属性返回变量名。var f2 = function () {};f2.name // "f2"但是,上面这种情况,只有在变量的值是一个匿名函数时才是如此。如果变量的值是一个具名函数,那么name属性返回function关键...原创 2018-12-03 18:04:38 · 312 阅读 · 1 评论 -
join()
join()方法以指定参数作为分隔符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。var a = [1, 2, 3, 4];a.join(' ') // '1 2 3 4'a.join(' | ') // "1 | 2 | 3 | 4"a.join() // "1,2,3,4" [undefined, null].join('#')// '#'...原创 2018-12-13 14:43:59 · 1128 阅读 · 0 评论 -
编写 service
在实际应用中,Controller 一般不会自己产出数据,也不会包含复杂的逻辑,复杂的过程应抽象为业务逻辑层 Service。我们来添加一个 Service 抓取 Hacker News 的数据 ,如下:// app/service/news.jsconst Service = require('egg').Service;class NewsService extends ...原创 2018-12-07 15:22:53 · 291 阅读 · 0 评论 -
算术运算符
JavaScript 共提供10个算术运算符,用来完成基本的算术运算。加法运算符:x + y 减法运算符: x - y 乘法运算符: x * y 除法运算符:x / y 指数运算符:x ** y 余数运算符:x % y 自增运算符:++x 或者 x++ 自减运算符:--x 或者 x-- 数值运算符: +x 负数值运算符:-x 减法、乘法、除法运算法比较单纯,就是执行相应的数...原创 2018-12-10 15:58:13 · 506 阅读 · 0 评论 -
单线程模型
单线程模型指的是,JavaScript只在一个线程上运行。也就是说JavaScript同时只能执行一个任务,其他任务都必须在后面排队等待。注意,JavaScript只在一个线程上运行,不代表JavaScript引擎只有一个线程。时实上, JavaScript引擎有多个线程,单个脚本之能在一个线程上运行(称为主线程),其他线程都是在后台配合。 ...原创 2018-12-17 14:26:37 · 288 阅读 · 0 评论 -
同步任务和异步任务
程序里面所有的任务,可以分成两类:同步任务和异步任务 同步任务是那些没有被引擎挂起,在主线程上排队执行的任务。只有前一个任务执行完毕,才能执行后一个任务。 异步任务是那些被引擎放在一边,不进去主线程、而进入任务队列的任务。只有引擎认为某个异步任务可以执行了(比如ajax操作从服务器得到了结果),该任务()...原创 2018-12-17 14:48:22 · 1520 阅读 · 0 评论 -
任务队列和事件循环
JavaScript运行时,除了一个正在运行的主线程,引擎还提供一个人任务队列里面是各种需要当前程序处理的异步任务。实际上,根据异步任务的类型,存在多个任务队列首先,主线程会执行所有的同步任务。等到同步任务全部执行完,就会去看任务队列里面的异步任务。如果满足条件,那么异步任务就重新进去主线程开始执行,这时她就变成同步任务了。等到执行完,下一个异步任务再进入主线程开始执行。一...原创 2018-12-17 14:58:36 · 328 阅读 · 0 评论 -
异步操作的模式
回调函数回调函数是异步操作最基本的方法。下面是两个函数f1和f2,编程的意图是f2必须等到f1执行完成,才能执行。function f1() { // ...}function f2() { // ...}f1();f2();上面代码的问题在于,如果F1是异步操作, F2会立即执行,不会等到f1结束再执行。这时,可以考虑改写f1,把f2写成f1的回调函数...原创 2018-12-17 16:18:32 · 252 阅读 · 0 评论 -
String
String([1, 2, 3]) // "1,2,3" Boolean() Boolean函数可以将任意类型的值转为布尔值。Boolean(undefined) // falseBoolean(null) // falseBoolean(0) // falseBoolean(NaN) // falseBoolean('') // false Boolean({}...原创 2018-12-11 16:20:13 · 92 阅读 · 0 评论 -
JavaScript 一共提供了8个比较运算符。
强制转换强制转换主要指使用Number()、String()和Boolean()三个函数,手动将各种类型的值,分别转换成数字、字符串或者布尔值。Number()使用Number函数,可以将任意类型的值转化成数值。下面分成两种情况讨论,一种是参数是原始类型的值,另一种是参数是对象。(1)原始类型值原始类型值的转换规则如下。// 数值:转换后还是原来的值Number...原创 2018-12-11 13:47:45 · 139 阅读 · 0 评论 -
错误处理机制
var err = new Error('出错了');err.message // "出错了" 上面代码中,我们调用Error构造函数,生成一个实例对象err。Error构造函数接受一个参数,表示错误提示,可以从实例的message属性读到这个参数。抛出Error实例对象以后,整个程序就中断在发生错误的地方,不再往下执行。if (error.name) { console...原创 2018-12-11 17:31:00 · 147 阅读 · 0 评论 -
标准库
概述JavaScript 原生提供Object对象(注意起首的O是大写)JavaScript 的所有其他对象都继承自Object对象,即那些对象都是Object的实例。Object对象的原生方法分成两类:Object本身的方法与Object的实例方法。Object对象本身的方法所谓”本身的方法“就是直接定义在Object对象的方法Object.print = functi...原创 2018-12-12 13:29:54 · 119 阅读 · 0 评论 -
浏览器的组成
浏览器的核心是两部分:渲染引擎和JavaScript解释器(JavaScript引擎)渲染引擎将网页代码渲染为用户视觉可以感知的平面文档不通的浏览器有不同的渲染引擎.firefox:Gecko 引擎Safari:WebKit 引擎 Chrome:Blink 引擎 IE: Trident 引擎 Edge: EdgeHTML 引擎 渲染引擎处理网页,通常分成四个阶段。...原创 2018-12-25 14:43:46 · 579 阅读 · 0 评论 -
闭包
理解闭包,首先必须理解变量作用域。JavaScript 有两种作用域:全局作用域和函数作用域。函数内部可以直接读取全局变量。var n = 999;function f1() { console.log(n);}f1() // 999函数外部无法读取函数内部声明的变量.function f1() { var n = 999;}console.log(n)...原创 2018-12-05 17:07:11 · 88 阅读 · 0 评论 -
arguments 对象
(1)定义由于 JavaScript 允许函数有不定数目的参数,所以需要一种机制,可以在函数体内部读取所有参数。这就是arguments对象的由来arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数,arguments[1]就是第二个参数,以此类推。这个对象只有在函数体内部,才可以使用。 var f = function (one) {...原创 2018-12-05 13:53:56 · 188 阅读 · 0 评论 -
js 循环语句
while 循环While语句包括一个循环条件和一段代码块,只要条件为真,就不断循环执行代码块。while (条件) 语句;// 或者while (条件) 语句;while语句的循环条件是一个表达式,必须放在圆括号中。代码块部分,如果只有一条语句,可以省略大括号,否则就必须加上大括号。var i = 0;while (i < 100) { console...原创 2018-11-29 16:15:04 · 124 阅读 · 0 评论 -
break和continue语句
break语句和continue语句都具有跳转作用,可以让代码不按既有的顺序执行。break语句用于跳出代码块或循环。var i = 0;while(i < 100) { console.log('i 当前为:' + i); i++; if (i === 10) break;}上面代码只会执行10次循环,一旦i等于10,就会跳出循环。for循环也可以使用bre...原创 2018-11-29 16:25:22 · 169 阅读 · 0 评论 -
标签 label
JavaScript 语言允许,语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置,标签的格式如下。label: 语句标签可以是任意的标识符,但不能是保留字,语句部分可以是任意语句。标签通常与break语句和continue语句配合使用,跳出特定的循环。top: for (var i = 0; i < 3; i++){ for (var...原创 2018-11-29 16:35:32 · 220 阅读 · 0 评论 -
变量提升(hoisting)
JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行的运行就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)。console.log(a);var a = 1;var a;console.log(a);a = 1;最后的结果是显示undefined,表示变量a已声明,但还未赋值。 ...原创 2018-11-29 16:43:56 · 402 阅读 · 0 评论 -
数据类型
JavaScript 的数据类型,共有六种ES6 又新增了第七种 Symbol 类型的值数值(number):整数和小数(比如1和3.14) 字符串(string):文本(比如Hello World)。 布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假) undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值 null...原创 2018-11-29 17:00:38 · 104 阅读 · 0 评论 -
toString()
函数的toString方法返回一个字符串,内容是函数的源码function f() { a(); b(); c();}f.toString()// function f() {// a();// b();// c();// }函数内部的注释也可以返回。function f() {/* 这是一个 多行注释*/}f.toString()...原创 2018-12-04 10:43:08 · 414 阅读 · 0 评论 -
函数作用域
作用域(scope)指的是变量存在的范围。Javascript 只有两种作用域:一种是全局作用域,变量在整个程序中一直存在,所有地方都可以读取;另一种是函数作用域,变量只在函数内部存在。ES6 又新增了块级作用域,函数外部声明的变量就是全局变量(global variable),它可以在函数内部读取。var v = 1;function f() { console.log(v...原创 2018-12-04 10:49:39 · 80 阅读 · 0 评论 -
函数内部的变量提升
与全局作用域一样,函数作用域内部也会产生“变量提升”现象。var命令声明的变量,不管在什么位置,变量声明都会被提升到函数体的头部。function foo(x) { if (x > 100) { var tmp = x - 100; }}// 等同于function foo(x) { var tmp; if (x > 100) { tm...原创 2018-12-04 10:51:14 · 1119 阅读 · 0 评论 -
数值
整数和浮点数JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。1 === 1.0 // true这就是说,JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。 这就是说,JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。容易造成混淆的是,某些运算...原创 2018-11-30 09:47:20 · 170 阅读 · 0 评论 -
NaN
(1)含义NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。5 - 'x' // NaN上面代码运行时,会自动将字符串x转为数值,但是由于x不是数值,所以最后得到结果为NaN,表示它是“非数字”(NaN)。另外,一些数学函数的运算结果会出现NaN。Math.acos(2) // NaNMath.l...原创 2018-11-30 10:09:58 · 270 阅读 · 0 评论 -
与数值相关的全局方法
parseInt()parseInt方法用于将字符串转为整数。parseInt('123') // 123如果字符串头部有空格,空格会被自动去除。parseInt(' 81') // 81如果parseInt的参数不是字符串,则会先转为字符串再转换。parseInt(1.23) // 1// 等同于parseInt('1.23') // 1字符串转为整数的...原创 2018-11-30 10:34:06 · 121 阅读 · 0 评论 -
isNaN()
isNaN方法可以用来判断一个值是否为NaN。isNaN(NaN) // trueisNaN(123) // false但是,isNaN只对数值有效,如果传入其他值,会被先转成数值。 isNaN为true的值,有可能不是NaN,而是一个字符串。isNaN('Hello') // true// 相当于isNaN(Number('Hello')) // trueisNa...原创 2018-11-30 10:46:48 · 13094 阅读 · 1 评论 -
函数本身的作用域
函数本身也是一个值,也有自己的作用域。它的作用域与变量一样,就是其声明时所在的作用域,与其运行时所在的作用域无关。var a = 1;var x = function () { console.log(a);};function f() { var a = 2; x();}f() // 1上面代码中,函数x是在函数f的外部声明的,所以它的作用域绑定外层,...原创 2018-12-05 10:45:14 · 181 阅读 · 0 评论 -
参数
function f(a, b) { return a;}f(1, 2, 3) // 1f(1) // 1f() // undefinedf.length // 2需要注意的是,函数的length属性与实际传入的参数个数无关,只反映函数预期传入的参数个数。没有办法只省略靠前的参数,而保留靠后的参数。如果一定要省略靠前的参数,只有显式传入undefined。func...原创 2018-12-05 10:49:50 · 169 阅读 · 0 评论 -
同名参数
如果有同名的参数,则取最后出现的那个值。function f(a, a) { console.log(a);}f(1, 2) // 2 上面代码中,函数f有两个参数,且参数名都是a。取值的时候,以后面的a为准,即使后面的a没有值或被省略,也是以其为准。 function f(a, a) { console.log(a);}f(1) // undefine...原创 2018-12-05 13:31:22 · 300 阅读 · 0 评论 -
数组
定义:数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。var arr=['a','b','c'];上面代码中的a、b、c就构成一个数组,两端的方括号是数组的标志。a是0号位置,b是1号位置,c是2号位置。除了在定义时赋值,数组也可以先定义后赋值。var arr = [];arr[0] = 'a';arr[1] = 'b...原创 2018-12-07 19:05:42 · 101 阅读 · 0 评论 -
let和const命令
let命令基本用法es6新增了let命令,用来声明变量,他的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。{ let a = 10; var b = 1;}a // ReferenceError: a is not defined.b // 1上面代码在代码块之中,分别用let和var声明了两个变量.然后在代码块之外调用这两个变量,...原创 2019-01-02 18:10:32 · 101 阅读 · 0 评论