JavaScript 简记

1、如果返回的是集合的话 element要加s 正常输出一个的时候不加s
document.getElementByTagName(‘h1’);
2、JavaScript是解释性语言 js文件在完成之后不会经过任何的编译 而是在运行的时候去解释执行
3、JS的变量在使用之前不一定要声明 JS是弱类型的语言(声明变量没有具体类型)
4、JavaScript不是面向对象的语言只是基于面向对象
5、数据类型的检测
①Array.isArray(arr);
②instanceof

let arr=[1,2,3];
arr instanceof Array;

③typeof不能检测array object null 这三个都返回object 只能检测 number string Boolean symbol undefined function
④Object.prototype.toString.call(1); //[object number]
6、

var myObject = {
    foo: "bar",
    func: function() {
        var self = this;
        console.log(this.foo);  //bar this指向myObject
        console.log(self.foo);  //bar self是this的副本
        (function() {
            console.log(this.foo);  
            //undefined 立即执行函数的this指向window
            console.log(self.foo);  
            //没有定义self将沿着作用域链向上查找 输出bar
        }());
    }
};
myObject.func();

7、字符串加数字时会转换成字符串进行拼接
8、

var A={n:4399};
var B=function(){this.n=9999};
var C=function(){ var n=8888;};
B.prototype=A;
C.prototype=A;
var b=new B();
var c=new C();
A.n++;
console.log(b.n);
/*在查找b.n时 首先查找b对象自身有没有.n属性 如果没有回去原型上找
当执行 var b=new B();时 函数内部 this.n=9999 返回给b对象 
所以输出 9999*/
console.log(c.n);
/*在查找c.n时 首先看c有没有.n的属性 在执行C.prototype=A时 会得到
4399 在执行 A.n++时会得到4400 所以输出4400*/

9、
^异或 在转换为01二进制时 同为0异为1
&按位与运算 同为1异为0
10、onblur元素失去焦点时触发 onfocus获得焦点时触发
11、总加载时间=白屏时间(first paint)+首屏时间+核心功能可用时间+页面可交互时间(dom ready)
12、DNS
DNS就是将域名翻译成IP地址 DNS协议的默认端口号53 主要用UDP协议当请求字节超过512时用TCP协议
13、阻止事件的方法
stopPropagation()阻止事件冒泡 不会影响定义在该元素上的其他事件
stopImmediatePropagation()会彻底的阻止事件 在其之后绑定的事件也会被阻止
preventDefault()阻止事件的默认动作
14、

let x = 10;
let foo = () => {
    console.log(x);
    let x = 20;
    x++;
}
foo();

该程序执行报错 let不存在变量提升 所以没有事先声明let的块级作用域不会访问外部的x 既不会访问外部变量又没有事先声明 就会报错
15、

var m= 1, j = k = 0; 
   function add(n) { 
       return n = n+1; 
   } 
   y = add(m); 
   function add(n) { 
       return n = n + 3; 
   } 
z = add(m); 

在js中定义了两个同名函数后 后面的函数会覆盖前面的函数 所以两次add的调用结果相同
16、

var color="green";
var test4399={
    color:"blue",
    getcolor:function(){
        var color="red";
        console.log(this.color);
    }
}
var getcolor=test4399.getcolor;
getcolor();//执行getcolor时this指向window 输出green
test4399.getcolor();//此时this指向test4399 输出blue

17、

if(! "a" in window)
//if语句的结果为false 所以不会执行对a的赋值操作
{
    var a = 1;
}
alert(a);//undefined

18、变量声明
使用var声明的全局变量不可删除 省略var声明的全局变量可删除
delete ?;
19、

void();//SyntaxError 语法错误
void(0);//undefined
typeof 1;//number

20、
变量abc都是字符串型的变量 而不是真正的undefined和false 所以只有空字符串会被判为false 如果undefined和false去掉双引号会被判false

var a="undefined";
var b="false";
var c="";
function assert(aVar){
    if(aVar)     
        alert(true);
    else  
        alert(false);
}
assert(a);//true
assert(b);//true
assert(c);//false

21、
静态语言(强类型语言)编译时变量的数据类型就可以确定 如:java c c#
动态语言(弱类型语言)变量不一定要声明 如PHP Python js
22、禁止页面前进和后退

history.go(0);
history.forward(-1);

23、

var foo = {n:1};
(function(foo)           
//形参foo同实参foo一样指向同一片内存空间,这个空间里的n的值为1
{
    var foo; //优先级低于形参,无效。
    console.log(foo.n);//输出1
    foo.n = 3; //形参与实参foo指向的内存空间里的n的值被改为3
    foo = {n:2}; //形参foo指向了新的内存空间,里面n的值为2
    console.log(foo.n);//输出新的内存空间的n的值
})(foo);
console.log(foo.n);//实参foo的指向还是原来的内存空间,里面的n的值为3

24、Flash提供了ExternalInterface接口与JavaScript通 ExternalInterface有两个方法 call和addCallback call的作用是让Flash调用js里的方法 addCallback是用来注册flash函数让js调用
25、打开后页面可以弹出1的代码

<iframe src="javascript:alert(1)"></iframe>
<img src="" onerror="alert(1)"/>

26、变量提升 函数提升
变量提升和函数提升指的是用var声明变量或者用function(){}声明的 会在js预解析阶段提升到顶端(let const不会)函数提升的优先级大于变量提升

function foo(){ //提到顶端
   console.log('函数')
}
var foo;
console.log(foo) //输出foo这个函数,因为上面foo没有被赋值,foo还是原来的值 
foo = 1;  //赋值不会提升,赋值后 foo就不再是函数类型了,而是number类型
console.log(foo) //输出1
foo();//这里会报错,因为foo不是函数了

27、在JS中 只有 0、-0、NaN、""、null、undefined 这六个值转布尔值时 结果为 false
28、当函数内部变量与全局变量同名时 全局变量会被覆盖
29、++ – 操作符前置和后置的区别
i++ 和 i–都是在计算之后才执行

var i=5;
var a=i--;
console.log(i);//4
console.log(a);//5  i-- 是在计算之后才执行

var i=5;
var a=--i;
console.log(i);//4
console.log(a);//4

var i=5;
var a=i++;
console.log(i);//6
console.log(a);//5

var i=5;
var a=++i;
console.log(i);//6
console.log(a);//6 

30、在执行setTimeout时即使间隔时间设定为0 也会等主程序执行完成之后在执行setTimeout
31、JavaScript RegExp 对象有三个方法 test exec compile
test()检测一个字符串是否匹配某个表达式 成功返回
32、forEach filter every some会跳过空位 map会跳过这个空位但是会保留这个值
33、setMonth 0~11 setMonth(5)就相当于设置了6月
34、Object.assign()用于对象的合并

const target={a:1};
const target2={b:2};
Object.assign(target,target2);
console.log(target);//Object { a: 1, b: 2 }

35、

var f = function g() {
        return 23;
    };
typeof g(); //error  在函数外部无法通过g访问到函数
typeof g;//undefined
typeof f();//number
typeof f;//functiom

36、

var obj=( ); //错误
var obj=[ ]; //声明一个数组
var obj={ }; //声明一个对象
var obj=/ /; //声明一个正则表达式

37、代码回收规则:
全局变量不会被回收
局部变量会被回收
只要被另一个作用域引用就不会被回收

var i = 1;
var i = 2;//i=1将会被i=2覆盖 全局变量不会被回收
var add = function() //add 不会被回收
{
    var i = 0;//被引用的变量不会被回收
    return function()
{
        i++;
        console.log(i);
    }
}();
add();

38、reflow回流 repaint重绘
页面布局发生变化将会引起回流
改变颜色等不影响周围元素的操作会引起重绘
39、运算中 + 号数字隐式转换为字符串 其余的运算符是字符串隐式转换为数字
40、
变量声明 函数声明都会被提升到作用域顶处
当出现相同名称时:变量赋值>函数声明>变量声明

发布了75 篇原创文章 · 获赞 0 · 访问量 3377

猜你喜欢

转载自blog.csdn.net/E_ISOLATE/article/details/102644157
今日推荐