• 数据类型 类型检测


    原始类型

    基本类型:number string boolean null undifined object

    object分为  Function Array Date

    number string boolean 又有包装类型

    new String('string'); 就是包装类型

    var str1='string';

    var str2=new String('string'); 包装类型

    包装类型可以有对应的方法

    demo

    str2.length //6

    str2.a=10;

    console.log(str2.a);//10

    基本类型也可以这样使用

    str1.length//6

    str1.a=10;//10

    console.log(str1.a);//undifined

    原理:

    基本类型在调用包装类型的方法时,类型创建基本类型的包装类型,在调用完之后,立即销毁这个临时的包装类型。所以在输出str1.a时结果是undifined

    number boolean 同上

    var num1=123;

    num1.tostring()number转string也是这个原理

    类型检测

    typeof   运算符

    instanceof  运算符

    Object.prototype.toString   方法

    constructor

    duck type

      

    typeof 返回是字符串

    适合 function和基本数据类型

    typeof 10 number

    typeof 'string'    string

    type of new Object() object

    type of function function

    typeof undifined  undifined

    typeof [1,2]   object

    typeof NaN number

    typeof null object

    对象类型检测使用

    instanceof Object

    判断对象是否是数组

    左操作数:操作数是是一个对象 否则返回false

    右操作数:是一个函数对象或者是函数构造器 typeerror 异常

    delete 运算符 删除一个对象的一个属性,也可以设置属性的不能删除 

    demo:
    
    var obj={a:1};
    
    alert(obj.a)//1
    
    delete obj.a;
    
    alert(obj.a)//undefined

    demo:

    var obj={};
    
    Object.defineProperty(obj,'x',{configurable:false,value:1});
    
    configurable:true 属性可以删除,为false不可以删除
    
    alert(obj.a)//1
    
    delete obj.a;//false
    
    alert(obj.a)//1

    删除不了原型链中的变量,不能用来删除变量

    js没有块级作用域

    for(var i=0; i<10; i++){

    }

    i并不是局部变量,在外部也可以访问i

    var a=b=1;

    虽然也可以实现a=1; b=1; 但是却是创建了一个全局作用变量b

    function aa(){

    var a=b=1;

    }

     console.log(typeof a);//undefined

    console.log(typeof b)//number

    在js中声明多个变量的方式:

    var a=1,b=1;应该用逗号隔开

    try

    catch

    finally

    function

    function aa(){}函数声明 会被预先处理,函数前置 在方法声明的前面调用方法是可以的 函数表达式不可以

    var aa=function(){}函数表达式  函数表达式也可以带函数名,在函数递归调用中很有用

    var aa=function cc(){}

    for in遍历对象的属性

    1 顺序不确定

    2 enumberable为false时不会在for in中出现出现

    3 for in 对象属性受原型链影响如果原型链中的enumberable为true也会在for in中出现

    with 定义局部变量

    但是在js中不建议实现

    1 让js引擎优化更难

    2 可读性差

    3 可被变量定义替代

    4 严格模式下被禁用

    demo:

    width(document.forms[0]){

      console.log(name.value);

    }

    等价于

    var form=document.forms[0];

    console.log(form.name.value);

    进入严格模式

    'use strict'

    方法内部

    function aa(){

    'use strict'

    }

    js文件中

    arguments变为参数的静态副本

    !function(a){

    arguments[0]=100

    console.log(a);//100

    }(1);

    arguments代表所有的形参,可以改变

    !function(a){

    'use strict'

    arguments[0]=100

    console.log(a);//1

    }(1);

    在严格模式下,arguments代表所有的形参,但是不能改变参数的值

    定义立即执行函数的方法

    !function(a){
        arguments[0]=100
        console.log(a);//100
    
    }(1);
    (function(a){
        console.log(a);
    })(1);
    var aa=(function aa(a){console.log(a);}(10));


  • 相关阅读:
    Jquery实现form表单提交后局部刷新页面的多种方法
    HTML5:'data-'属性的作用是什么
    ASP.NET MVC传递Model到视图的多种方式总结(二)__关于ViewBag、ViewData和TempData的实现机制与区别
    Var与Dynamic的区别
    ASP.NET MVC传递Model到视图的多种方式总结(一)__通用方式的使用
    动态规划(最大公共子序列)
    后缀名为properties,config和xml的文件内容读取
    初学者易犯的的错误
    jdk1.6与Myeclipse的冲突造成的
    微信红包算法思想
  • 原文地址:https://www.cnblogs.com/xiaofenguo/p/6772647.html
Copyright © 2020-2023  润新知