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、
变量声明 函数声明都会被提升到作用域顶处
当出现相同名称时:变量赋值>函数声明>变量声明