js基础知识

知识点
1、js变量必须以:英文字母、_、$开头

2、可以直接在控制台输出变量的名字,而不用打印console.log()

3、++ -- 运算符

var a = 10;

console.log(a++);        //10        先打印后a++

console.log(a);            //11    

console.log(++a);        //11        先++a后打印

console.log(a)             //11

4、任何数据类型加字符串都等于字符串

5、undefined、null、NaN、0、false、' ' =>false

6、短路语句:2 > 1 && console.log('打印'); //打印

7、isNaN( ) //是否是NaN

8、编程原则:高内聚,弱偶合

9、函数声明:

function test(){

}

10、函数表达式:

var test = function abc(){

}

var test = function (){

}

11、函数实参形参长度

function sum(a,b,c,d,e){

}
sum(1,2,3,4,5)

//    sum.length                 实参的长度
//    argumens.length        形参的长度

12、js编译过程三部曲:①语法分析 ②预编译 ③编译执行

13、函数声明整体提升、变量声明提升

14、一切声明的全局变量都是window的属性

15、预编译: 函数体里的预编译:AO对象 Activation Obiect (执行期上下文)

① 创建AO对象
② 找形参和变量声明,将变量和形参作为AO属性名,值为undefined
③ 将实参值和形参值统一
④ 在函数体里面找函数声明,值赋予函数体
AO{

}
全局的预编译:GO对象 Global Object (全局的执行上下文)

16、作用域精解:

运行期上下文,当函数执行时,会创建一个执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行期上下文,当函数执行完毕,它所产生的的执行期上下文被销毁。

17、立即执行函数:

(function (){
    console.log('立即执行函数');
}());

推荐大括号包裹在里面

18、对象删除方法

let obj = {
        a:1,
        b:2,
        c:function(){
            alert('hello');
        }
    }
delete obj.a    //删除obj.a的属性

19、构造函数

function Fun(name){
    this.name = name;
    this.say = function(){
        alert(this.name)
    }
}
let fun = new Fun('播求');
//  fun就是一个对象
① 在函数的最前面隐式的加上一个空对象 var this = {};
② 执行this.xxx = xxx;
③ 隐式的返回this    return this

20、原型
原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。
利用原型的特点和概念,可以提取共有属性。

Fun.prototype.name = 'heihei';    //所有这个构造函数的对象上都继承这个属性
Fun.prototype.say = function(){    //所有这个构造函数的对象上都继承这个方法
  alert('yo~');
}
function Fun(){
  this.name = 'xu';    //自己身上有属性就用自己的
}
let fun = new Fun();
//访问原型的对象 Fun.prototype    是原型的对象
//修改原型的对象就是  Fun.prototype.name = 'yo'

另一种写法:

Fun.prototype = {
  height:1400,
  lang:4900
}
function Fun(){
}
let fun = new Fun();

构造器

fun.constorctor    //function Fun(){
}    //指向的是构造它的那个构造函数

proto

//在构造函数的时候就隐式的创建了__proto__
function Fun(){
    //var this = {
        //__proto__:Fun.prototype
    }
}

21、call和apply

function Fun(a,b){
  this.a = a;
  this.b = b;
}
let fun = new Fun(1,2);
console.log(fun)    //{a:1,b:2}

let obj = {
}
Fun.call(obj,100,200)
console.log(obj)    //{a:100,b:200}
  function Student(age,name){
            this.age = age;
            this.name = name;
        }

        function Person(age,name,height){
            Student.call(this,age,name);
            this.height = height;
        }

        let fun = new Person(18,'徐俊杰',180)

        console.log(fun)

call需要把实参按照形参的个数传进去
apply需要传一个agguments

22、继承模式,命名空间,对象枚举

let fun = {
            a(){
                console.log('a')
                return this
            },
            b(){
                console.log('b')
                return this
            },
}

fun.a().b()    //链式调用  a b

function Fun(a){
            this.a = a;
            this.b = function(){
                console.log(this.a)
                return this
            };
            this.c = function(){
                console.log(this.a + 'ccccccc')
                return this
            }
}

let fun = new Fun('aaaaa')
fun.b().c()      //aaaaa   aaaaaccccccc

23、属性的访问方法

let obj = {
  name:'xujunjie'
}
方法一:obj.name    //xujunjie
方法二:obj['name']    //xujunjie

24、hasOwnProperty
判断对象的属性是否是自己的,如果是原型身上的就不是

var obj = {
            name:'13',
            age:123,
            sex:'male',
            height:180,
            weight:75,
            __proto__:{
                lastName:'deng'
            }
}

        for(var i in obj){
            if(obj.hasOwnProperty(i)){
                console.log(obj[i])    //'13',123,'male',180,75,'deng'
            }
        }

25、不是所有事件都能冒泡,有一些特殊的事件是没有冒泡的。
26、阻止事件冒泡,event.stopPropagation()
27、取消a标签默认调换事件 <a href="javascript:void()">111</a>
28、事件源对象 e.target

//事件委托
<ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
        <li>10</li>
</ul>
var u = document.getElementsByTagName('ul')[0];
u.onclick = function(e){
    console.log(e.target.innerHTML)    //点击哪个li打印出哪个li的innerHTML
}

29、类数组
属性要为索引(数字),必须有length,最好加上push方法,splice

var obj = {
    '0':'a',
    '1':'b',
    '2':'c',
    'length:3,
    'push':Array.prototype.push,
    'splice':Array,prototype.splice
}

30、封装type方法

function type(target){
            var template = {
                '[object Array]':'array',
                '[object Object]':'object',
                '[object Number]':'number - object',
                '[object Boolean]':'Boolean - object',
                '[object String]':'String - object',
            }
            //1.分两类 原始值 引用值
            //2.区分引用值
            if(target === null){
                return 'null';
            }
            if(typeof(target) == 'object'){
                return 'object';
                //数组
                //对象
                //包装类
                var str = Object.prototype.toString.call(target);
                return template[str];
            }else{
                return typeof(target);
            }
        }

31、click事件等于mousedown和mouseup事件的组合
32、onmouseover和onmouseup,onmouseenter和onmouseleave是H5的事件
33、onmousedown的时候判断是鼠标左键、滚轮、鼠标右键区分来自于event中的button。0代表鼠标左键,1代表滚轮,2代表鼠标右键。click是玩玩不好使的。click只能监听鼠标左键。
34、键盘事件:keydown,keypress,keyup
35、文本类操作事件:input,focus,blur,change
36、window.onload 等待所有的标签解析和加载之后才触发
37、滚动条封装方法

function getScrollOffset(){
            if(window.pageXOffset){
                return{
                    x:window.pageXOffset,
                    y:window.pageYOffset
                }
            }else{
                return{
                    x:document.body.scrollLeft + document.documentElement.scrollLeft,
                    Y:document.body.scrollTop + document.documentElement.scrollTop
                }
            }
        }

38、屏幕宽高方法封装

function getViewportOffset(){
            if(window.innerWidth){
                return{
                    w:window.innerWidth,
                    h:window.innerHeight
                }
            }else{
                if(document.compatMode == 'BackCompat'){
                    return{
                        w:document.body.clientWidth,
                        h:document.body.clientHeight
                    }
                }else{
                    return{
                        w:document.documentElement.clientWidth,
                        h:document.documentElement.clientHeight
                    }
                }
            }
        }

39、查看元素的尺寸

dom.offsetWidth,dom.offsetHeight

40、window.scroll(x,y) 和 window.scrollTo(x,y) 方法完全一致
41、window.scrollBy()会在之前的数据之上做累加
42、只有.style能改变css样式
43、JSON是一种传输数据的格式(以对象为样板,本质上就是对象,但用途有区别,对象就是本地用的,JSON是用来传输的)
44、禁止右键 oncontextmenu="return false"
禁止复制和剪切:oncopy="return false;" oncut="return false;"
禁止复制 onselectstart="return false"
禁止图片拖动 ondragstart="return false"
45、父组件通过 Prop 向子组件传递数据,通过插槽向子组件传递内容。
46、在需要更改组件样式的顶层容器的样式前,加上 /deep/
47、拖拽demo

window.onload = function() { 
  //拖拽功能(主要是触发三个事件:onmousedown\onmousemove\onmouseup) 
  var drag = document.getElementById('drag'); 
  //点击某物体时,用drag对象即可,move和up是全局区域,也就是整个文档通用,应该使用document对象而不是drag对象(否则,采用drag对象时物体只能往右方或下方移动) 
  drag.onmousedown = function(e) { 
    var e = e || window.event; //兼容ie浏览器 
    var diffX = e.clientX - drag.offsetLeft; //鼠标点击物体那一刻相对于物体左侧边框的距离=点击时的位置相对于浏览器最左边的距离-物体左边框相对于浏览器最左边的距离 
    var diffY = e.clientY - drag.offsetTop; 
    /*低版本ie bug:物体被拖出浏览器可是窗口外部时,还会出现滚动条, 
      解决方法是采用ie浏览器独有的2个方法setCapture()\releaseCapture(),这两个方法, 
      可以让鼠标滑动到浏览器外部也可以捕获到事件,而我们的bug就是当鼠标移出浏览器的时候, 
      限制超过的功能就失效了。用这个方法,即可解决这个问题。注:这两个方法用于onmousedown和onmouseup中*/
      if(typeof drag.setCapture!='undefined'){ 
        drag.setCapture(); 
      } 
    document.onmousemove = function(e) { 
      var e = e || window.event; //兼容ie浏览器 
      var left=e.clientX-diffX; 
      var top=e.clientY-diffY; 
      //控制拖拽物体的范围只能在浏览器视窗内,不允许出现滚动条 
      if(left<0){ 
        left=0; 
      }else if(left >window.innerWidth-drag.offsetWidth){ 
        left = window.innerWidth-drag.offsetWidth; 
      } 
      if(top<0){ 
        top=0; 
      }else if(top >window.innerHeight-drag.offsetHeight){ 
        top = window.innerHeight-drag.offsetHeight; 
      } 
      //移动时重新得到物体的距离,解决拖动时出现晃动的现象 
      drag.style.left = left+ 'px'; 
      drag.style.top = top + 'px'; 
    }; 
    document.onmouseup = function(e) { //当鼠标弹起来的时候不再移动 
      this.onmousemove = null; 
      this.onmouseup = null; //预防鼠标弹起来后还会循环(即预防鼠标放上去的时候还会移动) 
      //修复低版本ie bug 
      if(typeof drag.releaseCapture!='undefined'){ 
        drag.releaseCapture(); 
      } 
    }; 
  }; 
};

48、vue发布组件到npm,参考网站:https://www.vps123.co/?p=138

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353