脚本编写;基于对象;简单性;安全性;动态;跨平台
唯一能判断NaN的方法是通过isNaN()函数:
isNaN(NaN); // true
for …in+对象
with 加对象
this代表当前作用域对象的引用
跨域解决办法:
1. 通过jsonp跨域
2. 通过代理跨域:即新建一个本地的PHP获取跨域的PHP的返回值
3. nodejs中间件代理跨域
4. WebSocket协议跨域
5. 在PHP表头添加"header('Access-Control-Allow-Origin:*'); "
• jQuery对象转化为DOM对象:
○ var $v=$(''#v);//$v JQuery 对象
○ var v=$v[0];//v:DOM对象
○ var v=$v.get(0);//v DOM对象
• DOM 对象转化为jQuery对象
○ var v=document.getElementById('v');//v:DOM对象
○ var $v=$(v);//$v JQuery 对象
• JS按照存储方式区分变量类型:引用类型、值类型
• 值类型:变量不同,内存值不同:
var a=100; var b=a; a=200; => b=100;
• 引用类型:变量指向其指针:
var a={age:20};var b=a; b.age=21;=>a.age=21;
○ 对象、数组、函数
• 判断一个变量会被当做true或false:
var a=100; console.log(!!a);
• json只不过是JS的一个对象
○ JSON.stringfy( {a:10,b:20} ):把对象转化为字符串
○ JSON.parse( ' {"a":10,"b":20}' ):把字符串转化为对象
• var a={}其实是var a=new Object()的语法糖
• var a=[]其实是var a=new Array()的语法糖
• function Foo(){…}其实是var Foo=new Function(…)
• 使用instanceof判断一个函数是否是一个变量的构造函数
○ f instanceof Foo 的逻辑判断:
f 的__proto__一层一层向上,能否对应到Foo.prototype
• 原型规则和示例
○ 所有的引用类型(数组、对象、函数),都具有对象特性,即 可自由扩展属性(除了"null"意外)
○ 所有的引用类型(数组,对象,函数),都有一个__proto__(隐式原型)属性,
属性值是一个普通对象("null"意外)
○ 所有的函数,都有一个prototype(显式原型)属性,属性值也是一个普通的对象
○ 所有的引用类型(数组,对象,函数),__proto__属性值指向(完全等于)它的构造函数的"prototype"属性值
○ 当试图得到一个引入类型(数组,对象,函数)的某个属性时,如果这个对象本身没有这个属性,那么会从它的__proto__(即它的构造函数的prototype)中寻找
• 函数Object.prototype 的__proto__为'null',(这是JS为了防止出现死循环而特殊定义的)
• 函数如果没有return语句,函数执行完毕后也会返回结果,为undefined
• JavaScript关键字arguments,只在函数内部起作用,并且永远指向当前函数的所有参数
• JavaScript会提升变量的声明至函数顶部,但不会提升变量的赋值
• JS this原理
情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找。
情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。
情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象
this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的
但是:
箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者obj
• 闭包:就是携带状态的函数,它的状态可以完全对外隐藏起来。
○ 返回闭包时,牢记返回函数不要引入任何循环变量,或者后续会发生变化的变量
○ 闭包可以把多参数的函数变成单参数的函数
• 将JSON字符串转换成JSON对象 JSON.parse()
将JSON对象转换成JSON字符串 JSON.stringify()
JavaScript滴水穿石
最新推荐文章于 2024-06-24 15:13:10 发布