如果确实需要,也应该写成函数表达式,而不是函数声明语句。...因为解析器会将起首的大括号,理解成一个代码块,而不是赋值语句。...] move({}); // [undefined, undefined] move(); // [0, 0] 上面代码是为函数move的参数指定默认值,而不是为变量x和y指定默认值,所以会得到与前一种写法不同的结果...,而不是声明语句;其次它们的圆括号都不属于模式的一部分。...第一行语句中,模式是取数组的第一个成员,跟圆括号无关;第二行语句中,模式是p,而不是d;第三行语句与第一行语句的性质一致。 6.
(complex type)的值,一个对象往往是多个原始类型的合成;而undefined和null是两个特殊的值!...window); 运行结果: image.png 数值,字符串,布尔类型,函数,undefined返回的分别为number,string,boolean,function,undefined; 除此之外其它均返回...(谷歌开发的javascript语言替代品Dart语言,只有null,没有undefined)。 在if语句中,它们都会转为false;在==相等运算符中,两者相等!...'); }else{ console.log('undefined 在if语句中会转化为false'); } if(!...但是在作位运算时,因为位运算符只对整数起作用,所以此时会以32位带符号的整数进行运算,返回值也是32位带符号的整数! 由于浮点数不精确,所以涉及到小数的运算要小心: ?
($)组成 常用于表示函数、变量等的名称 例如:_abc,$abc,abc,abc123是标识符,而1abc不是 JavaScript语言中代表特定含义的词称为保留字,不允许程序再定义为标识符 JavaScript...console.log(i); } null和undefind的区别 null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null; undefined表示当声明一个变量但未初始化时...还有就是函数无明确的返回值时,返回的也是undefined。 null表示变量的值是空,undefined则表示只声明了变量,但还没有赋值。...,- 等一元运算符),不是一个函数,也不是一个语句。...// 当再次执行test()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
二是想体现这门语言的制定者是ECMA,而不是Netscape,这样有利于保证这门语言的开发性和中立性。 ...null和undefined null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null; undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。...还有就是函数无明确的返回值时,返回的也是undefined。 null表示变量的值是空,undefined则表示只声明了变量,但还没有赋值。 还不明白,上图吧!...,- 等一元运算符),不是一个函数,也不是一个语句。 ...// 当再次执行test()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
对于o2.foo来讲,基础值是对象o2,引用名是字符串"foo",而严格引用标志是false(因为示例代码未启用严格模式)。 扩展学习:为什么是引用而不是记录? 引用不是记录,尽管它可以是记录。...注意,获取函数中的this值引用的是我们想从中获取属性的原始对象,而不是在原型走查时从中找到属性的对象。...获取函数返回this.x。 然后,访问o2.foo。你觉得这个获取函数会返回哪个值? 我们发现,调用获取函数时,this值是我们最初尝试从中获取属性的对象,而不是从中找到这个属性的对象。...具体说,就是this值是o2,不是o1。可以从返回的是o2.x还是o1.x来判断:返回的是o2.x。 我们通过阅读规范就可以预测这段代码的行为! 访问属性时为什么调用[[Get]]?...规范哪里说在访问属性(如o2.foo)时要调用对象的内部方法[[Get]]了?没错,一定在哪个地方规定了。不要别人说什么就信什么!
HTML id 冲突 变量作用域:全局变量对局部变量 函数重载:当重载不存在时,覆盖函数 区分string.replace()函数不是全局的 parseInt应该包含两个参数 “this”和绑定问题...为参数设置默认值,以免你遗漏它们 for each循环是用于对象而不是数组 switch语句需要点技巧 总是在检查undefined前检查null 时间处理陷阱 1.区分大小写 变量名和函数名都是区分大小写的...if(var1 = var2){} // 返回true。把var2赋值给var1 JavaScript是弱类型,除了在switch语句中。当JavaScript在case比较时,它是非弱类型。...:条件语句关闭圆括号后的换行并不是给其一个分号。...所有其它字符串都被当作是十进制的。如果 numString 的前缀不能解释为整数,则返回 NaN(而不是数字)。
.then(procResult) 是不是觉得赏心悦目,作者第一次看到这样的代码时简直惊为天人,这简直是在写诗好吗?...回调方法没有返回语句 如果promise1的回调方法中没有返回语句,那promise2的回调方法中会打印什么内容呢?...1009 当js函数中没有返回值的时候,相当于是return undefined。...所以这里作者给的建议是:在回调方法中一定要有return语句,放弃在回调方法中使用return,相当于放弃获取在该回调方法中的所有操作结果。 6....这种情况在第五节已经提过了,这里del方法返回的promise实例直接就是fulfilled状态,而且传入的回调参数为undefined,也就是说这边的resultOfDelete为undefined。
当我们调用game.next("Yes").value时,先前的 yield 的返回值将被替换为传递给next()函数的参数"Yes"。...在数组中添加字符串"apple"后,长度变为2,并将从addToList函数返回。 push方法修改原始数组,如果你想从函数返回数组而不是数组长度,那么应该在push item之后返回list。...我们用相同的值三次调用了addFunction函数: 在第一次调用,num等于10时函数的值尚未缓存,if语句num in cache返回false,else块的代码被执行:Calculated!...通过将hasName设置为name,可以将hasName设置为等于传递给getName函数的值,而不是布尔值true。 new Boolean(true)返回一个对象包装器,而不是布尔值本身。...name.length返回传递的参数的长度,而不是布尔值true。 33. 输出什么?
console.log(i); } 6.6 null 和 undefined null 表示值是空,一般在需要指定或清空一个变量时才会使用,如name=null undefined 表示当声明一个变量但未初始化时...还有就是函数无明确的返回值时,返回的也是undefined 。 null 表示变量的值是空,undefined 则表示只声明了变量,但还没有赋值。...,- 等一元运算符),不是一个函数,也不是一个语句。...JSON.stringify(obj1); 16、RegExp 对象 //RegExp对象 //创建正则对象方式1 // 参数1 正则表达式(不能有空格) // 参数2 匹配模式:常用g(全局匹配;找到所有匹配,而不是在第一个匹配后停止...// 当再次执行test()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
,然后更新缓存并返回值,如果找到了,直接返回查找到的值即可。...MDN 对闭包的定义是:闭包是指那些能够访问自由变量的函数,自由变量是指在函数中使用的,但既不是函数参数又不是函数的局部变量的变量,由此可以看出,闭包=函数+函数能够访问的自由变量,所以从技术的角度讲,...在new关键字调用时会创建一个新的空间,每当创建实例时函数体内部this都会指向当前 1、立刻在堆内存中创建一个新的对象 2、将新建的对象设置为函数中的this 3、逐个执行函数中的代码 4、将新建的对象作为返回值...31、null,undefined的区别? null表示一个对象被定义了,但存放了空指针,转换为数值时为0。 undefined表示声明的变量未初始化,转换为数值时为NAN。...===被称为严格等式运算符,当两个操作数具有相同的值而没有任何类型转换时,该运算符返回true。 仅检查值相等,而=是一个更严格的等式判定,如果两个变量的值或类型不同,则返回false。
undefined和null在if语句中,都会被自动转为false,相等运算符甚至直接报告两者相等。 if (!...既然undefined和null的含义与用法都差不多,为什么要同时设置两个这样的值,这不是无端增加JavaScript的复杂度,令初学者困扰吗?...目前,null和undefined基本是同义的,只有一些细微的差别。 null表示"没有对象",即该处不应该有值。典型用法是: (1) 作为函数的参数,表示该函数的参数不是对象。...典型用法是: (1)变量被声明了,但没有赋值时,就等于undefined。 (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。...(3)对象没有赋值的属性,该属性的值为undefined。 (4)函数没有返回值时,默认返回undefined。
真正被赋值的是后者,而不是前者。...,而不是声明语句;其次它们的圆括号都不属于模式的一部分。...第一行语句中,模式是取数组的第一个成员,跟圆括号无关;第二行语句中,模式是p,而不是d;第三行语句与第一行语句的性质一致。...如果非尾部的参数设置默认值,实际上这个参数是没办法省略的 有默认值的参数都不是尾参数,这时无法省略该参数,而不省略它后面的参数,除非显示输入undefined 函数指定了默认值后,将会返回没有指定默认值参数的个数...这时,默认值x的作用域是函数作用域,而不是全局作用域。
console.log(i); } null和undefined null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null; undefined表示当声明一个变量但未初始化时...还有就是函数无明确的返回值时,返回的也是undefined。 null表示变量的值是空,undefined则表示只声明了变量,但还没有赋值。 还不明白,上图吧! ? ?...,- 等一元运算符),不是一个函数,也不是一个语句。...JSON.stringify(obj1); RegExp对象 //RegExp对象 //创建正则对象方式1 // 参数1 正则表达式(不能有空格) // 参数2 匹配模式:常用g(全局匹配;找到所有匹配,而不是在第一个匹配后停止...// 当再次执行test()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
/assets/scope.png)] 作用域链本质上是底层的变量查找机制,在函数被执行时,会优先查找当前函数作用域中查找变量,如果当前作用域查找不到则会依次逐级查找父级作用域直到全局作用域,如下代码所示...foo(); fn(); // 1 总结: 闭包:一个作用域有权访问另外一个作用域的局部变量, 好处:可以把一个变量使用范围延伸 闭包本质仍是函数,只不是从函数内部返回的...总结: 变量在未声明即被访问时会报语法错误 变量在声明之前即被访问,变量的值为 undefined let 声明的变量不存在变量提升,推荐使用 let【也有人认为具有提升但是不赋值不能使用】 变量提升出现在相同作用域当中...,参数的默认值为 undefined 调用函数时没有传入对应实参时,参数的默认值被当做实参传入 动态参数 arguments 是函数内部内置的伪数组变量,它包含了调用函数时传入的所有实参。...()); 总结: 箭头函数属于表达式函数,因此不存在函数提升 箭头函数只有一个参数时可以省略圆括号 () 箭头函数函数体只有一行代码时可以省略花括号 {},并自动做为返回值被返回 箭头函数中没有
如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。 返回值 一个新的 RegExp 对象,具有指定的模式和标志。...如果参数 pattern 是正则表达式而不是字符串,那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。...\xxx 查找以八进制数 xxx 规定的字符。 \xdd 查找以十六进制数 dd 规定的字符。 \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。...像 String.toUpperCase() 这样的方法,返回的是全新的字符串,而不是修改原始字符串。...全局对象是作用域链的头,还意味着在顶层 JavaScript 代码中声明的所有变量都将成为全局对象的属性。 全局对象只是一个对象,而不是类。既没有构造函数,也无法实例化一个新的全局对象。
如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。 返回值 一个新的 RegExp 对象,具有指定的模式和标志。...如果参数 pattern 是正则表达式而不是字符串,那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。...\r 查找回车符。 \t 查找制表符。 \v 查找垂直制表符。 \xxx 查找以八进制数 xxx 规定的字符。 \xdd 查找以十六进制数 dd 规定的字符。...像 String.toUpperCase() 这样的方法,返回的是全新的字符串,而不是修改原始字符串。...全局对象是作用域链的头,还意味着在顶层 JavaScript 代码中声明的所有变量都将成为全局对象的属性。 全局对象只是一个对象,而不是类。既没有构造函数,也无法实例化一个新的全局对象。
.then(procResult) 是不是觉得赏心悦目,作者第一次看到这样的代码时简直惊为天人,这简直是在写诗好吗?...5.3 回调方法没有返回语句 如果promise1的回调方法中没有返回语句,那promise2的回调方法中会打印什么内容呢?...1009 当js函数中没有返回语句的时候,相当于是return undefined。...所以这里作者给的建议是:在回调方法中一定要有return语句,放弃在回调方法中使用return,相当于放弃获取在该回调方法中的所有操作结果。 6....这种情况在第5.3节已经提过了,这里del方法返回的promise实例直接就是fulfilled状态,而且传入的回调参数为undefined,也就是说这边的resultOfDelete为undefined
ES6 规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。...ES6 规定,块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。 function f() { console.log('I am outside!')...如果确实需要,也应该写成函数表达式,而不是函数声明语句。...// undefined 上面代码中,全局变量a由var命令声明,所以它是顶层对象的属性;全局变量b由let命令声明,所以它不是顶层对象的属性,返回undefined。...函数里面的this,如果函数不是作为对象的方法运行,而是单纯作为函数运行,this会指向顶层对象。但是,严格模式下,这时this会返回undefined。
ES6 规定:在块级作用域之中,函数声明语句的行为类似于 let,在块级作用域之外不可引用。 块级作用域的出现,实际上使得获得广泛应用的立即执行匿名函数(IIFE)不再必要了。...对于函数中的 this,如果函数不是作为对象的方法运行,而是单纯作为函数运行,this 会指向顶层对象。但是严格模式下,this 会返回 undefined。...真正被赋值的是后者,而不是前者。...真正被赋值的是变量 baz,而不是模式 foo。...,另外它们的圆括号都不属于模式的一部分: 第 1 行语句中,模式是取数组的第 1 个成员,跟圆括号无关; 第 2 行语句中,模式是 p 而不是 d; 第 3 行语句与第 1 行语句的性质一致。
例如, never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。此外,变量也可能是 never 类型,当它们被永不为真的类型保护所约束时。...在定义变量时,可以设置变量的类型为 never 类型: let foo: never; // 定义never类型的变量 never 类型是任何类型的子类型,也可以赋值给任何类型: let bar: string...never = (() => { throw new Error('TypeScript never'); })(); 另外,对于死循环的函数或执行时总会抛出异常的函数来说,函数对应的返回值类型也是...如果我们忘记处理某个条件分支,TypeScript 也会警告我们(因为我们隐式返回 undefined): enum NoYes { No = 'No', Yes = 'Yes', } //@...:函数缺少结尾的 return 语句,并且返回类型不包含 undefined 类型。
领取专属 10元无门槛券
手把手带您无忧上云