var a=1||2;//先验证1真假、为真给a赋值1
复制代码
var a=1&&2; //先验证1真假、为真给a赋值二、为假给a
赋值1
复制代码
<ul id="list">
<li>88</li>
<li>90</li>
<li>78</li>
<li>86</li>
<li>92</li>
</ul>
<button id="btn">排序</button>
<script>
var oLis = document.getElementsByTagName("li");
btn.onclick= function () {
var li = document.createElement("li");
li.innerHTML=100;
ul.appendChild(li);
console.log(oLis);
}
// 输出6个li;浏览器会对li集合进行实时监听
//当页面中li个数发生变化那么此集合也会随着发生改变
</script>
复制代码
myFunction(5);
function myFunction(y) {
return y * y;
}
复制代码
function myFunction(a, b) {
return a * b;
}
var x = myFunction(4, 3);
//x就等于函数运算的结果
//x=12;
复制代码
function myFunction(a, b) {
return arguments.length;
}
document.getElementById("demo").innerHTML = myFunction(4, 3) //2
复制代码
function myFunction(a, b) {
return a * b;
}
var txt = myFunction.toString()
复制代码
x = findMax(1, 123, 500, 115, 44, 88);
function findMax() {
var i, max = arguments[0];
if(arguments.length < 2) return max;
for (i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}
复制代码
<script>
var myObject, myArray;
myObject={
name: "hahaha ",
hsk: "en"
};
function myFunction(a, b) {
alert(this);
return this.name +this.hsk;
}
myArray = [10, 2]
myObject = myFunction.apply(myObject, myArray)
复制代码
//类数组转数组
function sum(){
var ary=[].slice.call(arguments);
}
sum(1,2,33,88,56,88,92)
console.log(ary);
复制代码
try catchhtml
try{
console.log(a);
}catch(w){
w是一个对象
console.log(w.message);//w是错误信息
throw new Error(w.message);//抛出异常信息;此行代码下面都不运行
console.log(200);
console.log(100);
}
复制代码
var myStr = "Bob";
myStr[0]="j"
var myStr = "Bob";
myStr = "Job";
复制代码
var sTr="wdaefaegg";
var s=sTr[sTr.length-1]
复制代码
typeof只能监测基本数据类型和function
instanceof 检测某个实例是否属于这个类,是返回true/不是返回false
用字面量建立的基本数据类型的值检测不了
只要类在实例的原型链上都返回true
constructor 原型上的一个属性,指向原型上所属的类
实例.constructor===类
Object.prototype.toString.call
全部数据类型均可以检测
复制代码
代码执行以前进行变量声明,可是不进行提高java
变量名不能重名数组
一、obj.属性名浏览器
二、obj[“属性名”]bash
一、obj.已有属性名=值闭包
二、obj[“已有属性名”]=值app
一、obj.新增属性名=值函数
二、obj[“新增属性名”]=值ui
一、delete obj.属性名this
二、delete obj[“属性名”]
var reg=/abc/g; //字面量建立正则
//构造函数建立正则 ("正则的主题","修饰符")
var reg1=new RegExp("abc","g");
var str="abcDABCD"
str.replace(/cd/ig, "-");
//正则修饰符能够叠加到一块写
复制代码
一、若是变量只声明,没有赋值,那么默认存储的值就是undefined
var c;
console.log(c);
二、若是获取对象的属性名对应的属性值,若是属性值名不存在,获取的值是undefined
三、若是函数的形参没有对应的实参,那么形参默认储存值是undefined
四、若是函数没有return,那么默认值的返回值也是undefined
复制代码
返回值为null的状况:
一、经过Id获取元素的时候,获取不到返回null
二、销毁对象时,给他赋值为null
三、正则捕获对象时(reg.exec()),没有捕获到内容,返回null
NaN 和本身都不相等
对象先转字符串,再转数字,布尔转数字
比较的是空间地址
对象先转字符串,再转数字
对象转字符串,字符串比较
布尔转数字,字符串转数字
布尔转数字
字符串转数字
造成全局做用域---> 变量提高(var、function)--> 代码从上到下执行
无论条件是否成立,都要进行变量提高
在最新版本的浏览器中,对function函数,只声明不定义
在旧版本浏览器中,带function的不只声明,还要定义
in : 检测属性名是否属于这个对象;若是属于返回true,不属于返回false
变量提高只发生等号的左边
return下面的代码须要进行变量提高;可是return后面的代码不进行变量提高
return : 1. 返回值 2. 停止代码再也不向下运行
若是变量重复,不须要从新声明,可是要从新定义
匿名函数不须要进行变量提高
当获取变量对应值时,若是当前做用域不存在,须要向上一级做用域查找
函数的上一级做用域跟函数在哪执行没有关系==跟函数在哪定义有关,函数在哪一个做用域下定义,上一级做用域就是谁 全部做为值类型的都是数据类型中的一种
在JS中只要遇到报错,代码当即中止,再也不向下执行
私有做用域中带war的是私有变量、不带war的不是私有变量它会向上级做用域查找
在做用域链查找的过程当中、若是找到win也没有这个变量、至关于给win设置属性
function fn(){
b=13;
console.log(b);
}
fn();
console.log(b);
复制代码
在js变量提高代码运行时、当条件成立、进入判断体中(在ES6中、它是一个块级做用域)、先把fn声明和定义了、也就是判断体中代码执行以前、fn就赋值了、
在块级做用域下、带war的和function的不能够重名
函数有形参没实参始终是undefined
指js中有特定意义的关键字
一、全局做用域下的this指向window、和window是同一个空间地址
console.log(this);
console.log(window);
this.a=1
复制代码
二、若是给元素的事件行为绑定函数、那么函数中的this指向当前被绑定的那个元素
oBox.onclick=function(){
console.log(this);//this---oBox}
复制代码
三、函数中的this、要看函数执行前有没有“.”、有的状况下this就指向谁、没有就指向window
四、自执行函数中的this永远指向window
五、定时器中函数的this指向window
六、构造函数中的this指向当前的实例
七、call、apply、bind能够改变函数中this的指向
在js中let不存在变量提高、let执行时会造成私有做用域
let在相同做用域中、let不能声明相同名字变量、有重名直接报错
无论什么方式在当前做用域下声明了变量==、再次==使用let建立都会报错
在原有浏览器渲染机制下、基于typeof等逻辑运算符检测一个未被声明的变量、不会报错、返回undefined
若是当前变量是基于ES6语法处理、在没有声明这个变量时、使用typeof检测则直接报错、不是undefined、这样解决了暂时性死区
1.函数执行前造成一个私有做用域、代码执行以前默认建立空的对象
2.而且改变了当前做用域下的this指向、让其指向那个空对象
3.当代码运行完、把这个对象返回
普通函数和构造函数
经过new这种方式建立一个数组
var f=new Array(12,12)
console.log(f);
//若是只有一个参数,表明数组的长度
// 不是一个参数就表明数组成员的每一项
复制代码
在严格模式下arguments和形参没有映射机制
在严格模式下不容许给一个对象设置重复属性名的
obj={n:10,n:20}
复制代码
在严格模式下、函数执行、若是没有明确指定执行的主体(函数前面没有点)再也不像非严格模式下、统一交给window、而是让this指向undefined、表明没有执行主体
严格模式下、有执行主体this就指向谁、没有执行主体、this就是undefined
详见高程三 严格模式和非严格模式的汇总
2.若是没有参数,能够省略小括号;
3.若是return一个基本数据类型的值,不会覆盖默认返回的那个对象,若是return引用的类型,会将默认的那个覆盖掉;
4.instanceof :检测实例是否属于某个类;
5.hasOwnProperty:检测当前属性是不是私有属性,若是是返回true,不是返回false
console.log(d.hasOwnProperty("a"));//true
console.log(d.hasOwnProperty("toString"));//false
console.log(d.hasOwnProperty("c"));// false
复制代码
封装检测是否数据类型属于私有属性仍是公有属性
function hasPublicProperty(obj,attr) {
return attr in obj && !obj.hasOwnProperty(attr)?true:false;}
复制代码
function Person(name,age){
this.name=name;
this.age=age;
}
Person.prototype.eat=function(){
console.log("Person 吃饭")
}
function Student(num,score){
this.num=num
this.score=score
}
//继承
Student.prototype=new Person("小红",10)
Student.prototype.constructor=Student
var stu =new Student(2016002288,80)
stu.eat()//Person 吃饭
复制代码
function Person(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
}
Person.prototype.sayHi=function(){
console.log("你好")
}
function Student(name,age,sex,score){
//借用构造函数
Person.call(this,name,age,sex)
this.score=score
}
// 改变了原型指向
Student.prototype=new Person();//不传值
Student.prototype.eat=function(){
console.log("吃东西");
}
var stu=new Student("小黑",20,"男","100分")
console.log(stu.name,stu.age,stu.sex,stu.score);
stu.sayHi()//你好
stu.eat()//吃东西
复制代码
在严格模式下,若是不传或传undefined,那么this就是undefined 传null 就是null
只能接收最多两个参数 和call不一样的是传参不一样
bind 方法的返回值就是改变this以后的fn
分享一波专属表情包戳我!