zoukankan      html  css  js  c++  java
  • js基础总结

    基础

    普通---立即执行
    async---异步加载,立即执行,不按照顺序执行
    defer---异步加载,最后执行
    <noscript>
    

    数据类型

    number
        NaN---未知的数值 通过inNaN(判断是否能转化为数值)来判断
        infinity
        指数形式:aE+n a乘10的n次方,11E-3 ===> 11*10^-3 = 0.011
    undefined---未定义
    null---空对象指针
    string
    boolean
    object
    typeof操作符:undefined boolead string number object(null) function
    基本转义字符 \n换行,\b空格
    

    控制结构

    1.do-while
    先执行,再判断
    2.while
    判断再执行
    3.for
    ---都是为假就跳出循环
    4.for-in-迭代读取对象的key,可能不会按照顺序读取...
    5.label,break,continue
    6.with---将代码的作用域设定到特定对象中
    with(a){
        var x=b;
        var y=c;
    }---将作用域设定到a对象中;
    等同于
    var x=a.b;
    var y=a.c;
    7.switch
        case x : 语句;break;
        default: 语句;
    

    变量,作用域和内存

    变量类型:
    基本类型---简单数据段
    引用类型---对象类
    1.对于直接赋值 a=b
    基本类型传递值
    引用类型传递指针,所以改变b,a会改变;
    2.对于向函数传递参数
    都是传递值;
    
    执行环境及作用域
    function  a(){
        function b(){
        }
    }
    环境栈: ↓
            b的环境对象---活动对象,包括arguments变量
            a的环境对象---第二级作用域
            window---全局作用域
    

    引用类型

    通过new或者字面量的形式创建
    公共方法:
        tostring()
        tolocalstring()
        valueof()
    引用类型包括以下几类:
    1.object
    2.array
    3.date
        获得时间
         var now = new Date;
         然后通过getTime()等方法
        创建时间
         var dateTime = new Date("2016/05/20 23:42:00");
    4.RegExp
    5.Function
    6.包装类型-boolean,string,number
    ---
    var a='xx';
    var b=a.length; b=2;
    相当于:
    var a='xx';
    a1=new string('xx');
    b=a1.length;
    a1=null;
    基本数据类型能使用方法,是因为转换成了这些包装类型,然后立即被释放;
    a.color='red';---a变成包装类型string,添加属性color,然后被释放
    alert(a.color);---undefined,又变成了基本类型.
    ---
    var value='1';
    Number(value);---转换函数,转成数值
    new Number(value);---构造函数,构造了一个包装类型
    7.单体内置对象
    Global
        全局对象---最底层的对象---没有直接调用的方法,只有通过window对象调用
        window对象是Global(js语法中的最底层对象)与浏览器对象之和;
    Math
    
    

    面向对象

    对于一个属性--由一个name,6个特性组成;
    可配置性 configurable ---能否delete删除;能否修改特效;能否设置为访问器属性;
    可枚举性 enumerable---能否for-in
    数据属性:
    可修改性 writable
    数值 value---默认undefined
    访问器属性:(es5标准,ie8及以下没有--主要 适用与移动端);
    set
    get
    
    前三个特性,默认true,但是如果开始设置,任意一个特性,其余的默认false;   
    数据属性和访问器属性不能混用;
    
    var a = {};
    Object.defineProperty(a,"name",{
        value:"lh",
        writable:false          --- 这个时候,其余两个属性设置为了false;
    })
    var b = Object.getOwnPropertyDescriptor(a,"name");
    得到特性名=>值组成的对象;
    
    Object.defineProperty(a,"name",{
        set:function(e){
            this.name=e+1;
        }
    设置多个属性
    Object.defineProperties(a,{
        name:{},
        vale:{}
    })
    
    Object模式  
    var x = new Object()
    x.name='';
    ...
    
    对象字面量
    var x = {
        name:'',
        ...
        }
        
    工厂模式
    function x (){
        var o = new Object();
        o.name='';
        ...;
        return o;
    }
    
    构造函数
    function x(){
        this.name='';
        }
    var y =new x (); 
    
    除了构造函数,这几种方法原型链都是
    对象--对象原型(Object.prototype)--null
    构造函数是
    实例化的对象(y)--实例原型(y.__proto__/x.prototype)--对象原型(Object.prototype)--null
    
    
    function a(){
        this.fn=function(){}
    }---构造函数a中创建一个方法fn;
    var b1 = new a();
    var b2 = new a();
    这个时候 b1.fn并不等于b2.fn;
    要他们共用一个方法,要将方法放在原型a上;
    a.prototype.fn = function(){...};
    
    ----------------------------------------
    实际使用:
    function student(){
        this.name=prop.name||"匿名";
    };
    student.prototype.fn=function(){...};
    function createstudent(prop){
        return new student(prop||{});
    }
    ---然后直接用 var xiaoming = createstudent();来创建
    1.不要new
    2.传参数不用管顺序,和有没有,还能设置默认值...
    3.完全匹配json数据;
    var x = createstudent({
        "name":"xiaoming",
        ...
    }) 
    
    function mor(obj) {
        var rs = [];
        while(obj) {
           rs.push(obj);
           obj = Object.getPrototypeOf(obj);
        } 
        return rs;
    }
    
    
    
    
    原型上的变量,实例中赋值后,变成不继承了??--继承,但是优先级不同
    q.hasOwnProperty("vv") true
    w.hasOwnProperty("vv") flase  --
    在q中添加了vv属性,因为调用是从上至下的,所以现在实例中查找,再去原型--
    可以通过delete q.vv;然后调用的又是原型中的了.
    
    function empty(){};??
                                实例a	                   构造函数b		           原型c	
    ---------------------------------------------------------------------------------------------
    
    constructor				     b 			    	functon Function(){}     		     b
    -----------------------------------------------------------------------------------------------
    
    prototype                   undefine       				c           		     undefine
    -----------------------------------------------------------------------------------------------
    
    __proto__					    c          		function Empty(){}               Object
    -----------------------------------------------------------------------------------------------
    __proto__才是原型,继承.
    定义函数时,就会有construct和prototype出现
        函数的原型是个空对象,继承自Object;
        new的作用是将this绑定?
    ------------------------------------------------------------------------------------------------
    
    
    构造函数模式+原型模式实际运用
    var prop = {
    	name:"gou",
    	cat:"miao"
    }
    
    function a(){
    	this.cat=prop.cat||'mao' 
    };
    a.prototype={
    	constructor:a,
    	建立对象的时候,设置原型的时候.只能单个设置
    eg:
        a.prototype.name:'="name',
    	say:function(){
    		return this.say+this.name;
    	}
    }
    
    function createA(){
    	return new a (prop||{})
    }
    
    var b = createA(prop);
    
    稳妥构造模式
    function a (){
        var o = new Object();
        name="xx";
        o.sayname=function(){
            alert(name);
        }
        return o;
    }
    适应在需要安全的地方--除了o.sayname方法,无法访问内部属性;
    
    
    

    函数

    闭包:
    能访问函数内部.
    匿名函数的返回---
    			function a(x){
    				var t='he';
    				console.info(x);						
    				return function (x){
    				console.info(t,x,this);
    				}
    			}
    		var b=a('he');---'he',b=function(){...};this指向windows,但是环境仍然为a;
    		能访问到t,x又作为匿名函数的参数了,所以如b不赋值,则为undefined;
    	    b('he');---'he,he,window';
    严格模式下,不能使用arguments.callee;
    var a = (function b(){})---用来内部调用自己;
    闭包用途:
    function a(){
    	var x=1;
    	add=function(t){
    		x=x+t;
    		console.info(x);
    	};
    	return function b(){
    		x++;
    	console.info(x);
    	};
    
    }
    var b=a();
    b();2
    b();3
    add(1);5
    
    ---通过闭包,b函数赋予给全局变量b,b函数又依赖a,所以将a环境一直保存在内存中了...
    add没用var创建,所以是个能访问a内部的全局函数,可以用来设置a内的变量;
    
    

    其他

    错误处理

    所以抛出的错误都是error对象的实例
    
    error对象:
        message:错误提示信息
        name:错误名称(非标准属性)
        stack:错误的堆栈(非标准属性)
    派生的六种对象
    1.syntaxError---语法错误
    2.refrenceError---引用了不存在的变量
    3.rangeError---超出范围
    4.typeError---使用变量或参数不是预期类型
    5.URIError---URI相关函数的参数不正确
    6.EvalError---Eval函数没有正确执行
    自定义错误:
    function a(){}
    a.prototype=new Error;
    a.contructor=a;
    var b=new a;
    
    throw语法
    throw抛出一个对象,然后中断
    try{}
    catch(){}
    finally{}
    执行try中的语句,如果完成,执行finally语句
    如果错误,catch捕获错误(不抛出错误),然后执行catch语句,再finally语句
    

    常用操作符与方法汇总

    操作符
    typeof---主要检测基本类型
    instanceof---主要检测引用类型 检测对象的cunstructor
    1.Object
    实例 instanceof 原型
    Object.getPrototypeOf() 获得对象的原型
    Object.constructor 对象的构造函数 
    Object.hasOwnProperty( ) 检查属性是否被继承 
    Object.isPrototypeOf(a) 一个对象是否是另一个对象的原型 (a原型链上是否有Object);
    Object.propertyIsEnumerable( ) 是否可以通过for/in循环看到属性 
    Object.toLocaleString( ) 返回对象的本地字符串表示 
    Object.toString( ) 定义一个对象的字符串表示 
    Object.valueOf( ) 指定对象的原始值 
    2.Array
    Array.concat( ) 连接数组 
    Array.join( ) 将数组元素连接起来以构建一个字符串 
    Array.length 数组的大小 
    Array.pop( ) 删除并返回数组的最后一个元素 
    Array.push( ) 给数组添加元素 
    Array.reverse( ) 颠倒数组中元素的顺序 
    Array.shift( ) 将元素移出数组 
    Array.slice( ) 返回数组的一部分 
    Array.sort( ) 对数组元素进行排序 
    Array.splice( ) 插入、删除或替换数组的元素 
    Array.toLocaleString( ) 把数组转换成局部字符串 
    Array.toString( ) 将数组转换成一个字符串 
    Array.unshift( ) 在数组头部插入一个元素 
    Array.
    
    
    3.Boolean
    Boolean.toString( ) 将布尔值转换成字符串 
    Boolean.valueOf( ) Boolean对象的布尔值 
    4.Function
    Function.apply( ) 将函数作为一个对象的方法调用 
    Function.arguments[] 传递给函数的参数 
    Function.call( ) 将函数作为对象的方法调用 
    Function.caller 调用当前函数的函数 
    Function.length 已声明的参数的个数 
    Function.prototype 对象类的原型 
    Function.toString( ) 把函数转换成字符串 
    5.Number
    Number.MAX_VALUE 最大数值 
    Number.MIN_VALUE 最小数值 
    Number.NaN 特殊的非数字值 
    Number.toLocaleString( ) 把数字转换成本地格式的字符串 
    Number.toPrecision( ) 格式化数字的有效位 
    Number.toString( ) 将—个数字转换成字符串 
    Number.valueOf( ) 返回原始数值 
    6.String(字符串对象)
    String.charAt( ) 返回字符串中的第n个字符 
    String.charCodeAt( ) 返回字符串中的第n个字符的代码 
    String.concat( ) 连接字符串 
    String.indexOf( ) 检索字符串 
    String.lastIndexOf( ) 从后向前检索一个字符串 
    String.length 字符串的长度 
    String.localeCompare( ) 用本地特定的顺序来比较两个字符串 
    String.slice( ) 抽取一个子串 
    String.split( ) 将字符串分割成字符串数组 
    String.substr( ) 抽取一个子串 
    String.substring( ) 返回字符串的一个子串 
    String.toLocaleLowerCase( ) 把字符串转换小写 
    String.toLocaleUpperCase( ) 将字符串转换成大写 
    String.toLowerCase( ) 将字符串转换成小写 
    String.toString( ) 返回字符串 
    String.toUpperCase( ) 将字符串转换成大写 
    String.valueOf( ) 返回字符串 
    7.其他
    parseInt(x,16/10/8) --- 如果x=08 有没有指定radix 那就会输出8进制
    parseFloat(x,16/10/8)
    isNaN()
    isFinite() 检测是不是infinity与NaN
    escape() 对整个字符串进行转义 (% ? 等在url中有意义的也会被转义)
    encodeURI() 对URL进行转义(只会对参数)  --- decode...反转义
    encodeURIComponent() 对整个url转义(当url作为参数时,如跳转)
  • 相关阅读:
    Java实现 LeetCode 343 整数拆分(动态规划入门经典)
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 338 比特位计数
    H264(NAL简介与I帧判断)
    分享一段H264视频和AAC音频的RTP封包代码
  • 原文地址:https://www.cnblogs.com/LiangHuang/p/6413893.html
Copyright © 2011-2022 走看看