js常用笔记
此文仅为笔记,代码来源自网络
网络技术文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript
1、使用||和&&简化语句,其中||:首先检查左边的值,如果能将该值转换为true,则返回左边的值,不执行右边代码,否则返回右边的值;&&:首先检查左边的值,如果能将该值转换为false,则返回左边的值,不执行右边代码;否则返回右边的值,例如:typeof cb == "function" && cb('a'),简化代码比如:if(a==null){a={}=> a||a={}
2、Object.defineProperty(obj, prop, descriptor)方法接收三个参数:需要添加或修改属性的对象,属性名称,属性描述options{configurable:false;enumerable:false;value:undefined;writable;get;set}。
3、"use strict":严格模式
4、instanceof
运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype
属性,object instanceof constructor
5、声明:var:声明一个变量 const 声明创建一个只读的常量。常量不可以通过赋值改变其值,也不可以在脚本运行时重新声明。它必须被初始化为某个值。这不意味着常量指向的值不可变,而是变量标识符的值只能赋值一次,对象属性是不受保护的,let
声明了一个块级域的局部变量,并且可以给它一个初始化值。
6、undefined
值在布尔类型环境中会被当作 false,在数值类环境中会被转换为
NaN
null值在布尔类型环境中会被当作 false,在数值类环境中会被转换为0
在涉及加法运算符(+)的数字和字符串表达式中,JavaScript 会把数字值转换为字符串。
字符串转换为数字:使用parseInt()
和parseFloat()或使用单目加法运算(+"1.1")
7、变量的作用域:语句块中var声明的变量将成为语句块所在代码段的局部变量
变量声明提升:你可以引用稍后声明的变量而不会引发异常;但是在使用或引用某个变量之后进行声明和初始化操作,这个被提升的引用仍将得到 undefined 值。
隐式全局变量:不管一个变量有没有用过,JavaScript解释器反向遍历作用域链来查找整个变量的var声明,如果没有找到var,解释器则假定该变量是全局变量,如果该变量用于了赋值操作的话,之前如果不存在的话,解释器则会自动创建它
8、函数表达式:function 函数名称[仅限函数体内有效】(可选)(参数:可选){ 函数体 }(用于=,new,())
表达式定义的函数,称为匿名函数。匿名函数没有函数提升,
函数声明:function 函数名称 (参数:可选){ 函数体 },不要将函数声明写到语句块中,虽不报错,但有bug
9、在条件表达式中最好不要使用“=”来判断条件是否相等,如if(x=y)应该写为:if((x=y))
False等效值:false(是指布尔值,不是布尔对象),undefined,null,0,NaN,空字符串("")
10、标签语句:lable:statement,
label
的值可以是js的任何非保留字标识符。 用label 标识的语句可以是任何语句。
11、闭包:当内部函数以某一种方式被任何一个外部函数作用域访问时,一个闭包就产生了,注意闭包中的this
匿名闭包:(function () {}())
匿名函数:将全局变量当成一个参数传入到匿名函数然后使用funtion(x){}(window.x)
12、this指代
什么完全取决于函数在何处被调用,而不是在何处被定义。
13、arguments对象:函数的实际参数会被保存在一个类似数组的arguments对象中,从0开始 arguments.callee:调用自身 不支持严格模式
14、解构:语法是一个能从数组或对象对应的数组结构或对象字面量里提取数据的 Javascript 表达式。
15、函数定义:new function(arg1, arg2, ..., argN, function_body):例如将字符串转换为对象:(new Function(“return "+json))()
16、独立作用域:只能通过函数代码类型的执行上下来创建,变量与执行上下文相关
执行上下文的代码:进入执行上下文(形参,变量声明,函数声明<会覆盖同名变量声明>)、执行代码
17、后台字符串转json:(new Function('return ' + data.Result))()
18、checked=checked 不起作用:$("#iszg").prop("checked", true);