zoukankan      html  css  js  c++  java
  • js基础一

    1、声明提升:变量的声明提升,函数的声明提升,但函数赋值表达式不会提升;

    foo(); // 正常运行,因为foo在代码运行前已经被创建
    function foo() {}
    foo(); // 出错:TypeError
    var foo = function() {}; 

    2、判断变量是否为undefined

    if(typeof(a)==undefined)  或if(window.a==undefined)

    3、bar 函数声明外是不可见的,这是因为我们已经把函数赋值给了 foo; 然而在 bar 内部依然可见。这是由于 JavaScript 的 命名处理 所致, 函数名在函数内总是可见的

    var foo = function bar() { bar(); // 正常运行 } bar(); // 出错:ReferenceError

    4、阻止默认事件(比如给a标签添加点击事件后,不然其跳转)可以在自定义事件处理程序中调用下面方法:

    event.preventDefault();

    5、回调函数callback:函数作为参数传递,在父函数执行完后执行。

    无参的回调函数:$.get( "myhtmlpage.html", myCallBack );

    有参的回调函数:

    $.get( "myhtmlpage.html", function() {
     
    myCallBack( param1, param2 );
     
    });
    错误写法:

    $.get( "myhtmlpage.html", myCallBack( param1, param2 ) );

    这样写回调函数会立即执行,并把返回结果作为父函数的第二个参数。

     

    6、事件处理函数中的this指向,被点击(准确说在哪个元素上触发的事件,这里就是指这个元素的dom对象)的元素。

    7、事件处理函数可以接受一个event对象的参数,这个对象可以用于确定事件的性质,和防止事件的默认行为(event.preventDefault();)。

    8、数据类型:

    ECMAScript中有:

    5种中简单数据类型(也称基本数据类型):Undefined、Null、Boolean、Number和String

    1种复杂类型:Object (本质是一组无序的键值对组成)。(备注:js自带的Array、Date、RegExp也是Object类型)

    ECMAScript不支持任何创建自定义类型的机制,所有值最终都是上述6种类型之一。

    由于ECMAScript数据类型具有动态性,所以的确没有再定义其它数据类型的必要啦

    9、js中的正则,RexExp类型

    字面表达式: var pattern1=/正则表达式字符串/标志(g、i、m)

    new表达: var pattern2=new RegExp("正则表达式字符串",“g|i|m")

    RegExp实例属性:

    global 布尔值,是否使用了g标志位

    ignoreCase 布尔值,。。。i标志位

    multiline 。。。m标志位

    source,正则表达式的字符串表示(字面值)

    RegExp实例方法:

    exec(要使用正则去匹配的字符串 )

    tes

    10、 js中的对象属性:

    属性类型:数据属性、访问器属性

    数据属性:(类似C#中的字段)包含一个数据值的位置,可以读取和写入,有4个内部特性(供解析器使用):[[configurable]]、[[enumerable]]、[[writable]]、[[value]]

    访问器属性:(类似C#中的属性),不包含数据值,可包含一对set(写时用)、get(读用)函数,也有4个内部特性:[[configurable]]、[[enumerable]]、[[get]]、[[set]]

    一次定义多个属性:Object.defineProperties(对象,{属性名:{属性特性对象},。。。})

    如:var book={};   Object.defineProperties(book,{name:{value:'C#高级编程',writable:false},author:{value:'lxf',configurable:true}})

    book.name //c#高级编程  

    查看属性特性:

    Object.getOwnPropertyDescriptor(book,"author")  //Object {value: "lxf", writable: false, enumerable: false, configurable: true}

    11、undefined null 0在布尔类型环境中会被当做false来对待。

    undefined在Number类型环境中会被当做 NaN

    null在Number类型环境当中会被当做0看待

    12、

    变量的域

    在所有函数之外声明的变量,叫做全局变量,因为它可被当前文档中的其他代码所访问。在函数内部声明的变量,叫做局部变量,因为它只能在该函数内部访问。js没有块左右域的概念。

    全局变量

    全局变量实际上是全局对象(window)的属性。在网页中,(译注:缺省的)全局对象是 window,所以你可以用形如window.variable的语法来设置和访问全局变量

    定义全局变量的3种方式:

    1、var mm;在function外部定义

    2、mm=123;在function内外部(注:在function内部只有当该function被调用后 该变量才被定义)

    3、使用window对象属性:window.mm

    常量

    你可以用关键字 const 创建一个只读的常量。常量标识符的命名规则和变量的相同:必须以字母、下划线或美元符号开头并可以包含有字母、数字或下划线。

    const prefix = '212';//常量在赋值后不可以改变


    13、特殊运算符:
    条件运算符:a>b?a:b
    delete、in、instanceof、typeof、new、this、void(执行一个js表达式(一条语句),但返回undefined,后面括号可省略)

    14.js中的绝大多数语句(如,if语句 for语句,while语句 do while语句 switch语句)和js中相同。
    细微区别:for each 语句有空格分开写的
    try语句块中有异常要自己用thorw语句显示抛出异常,否则catch语句捕捉不到

    15、Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组。如,每个Dom元素的children属性
    1 var a={length:2,0:'first',1:'second'};
    2 Array.prototype.slice.call(a);//  ["first", "second"]
    4 var a={length:2};
    5 Array.prototype.slice.call(a);//  [undefined, undefined]


    16.动态脚本和样式(备注:需要在页面加载完成后调用)

    function loadScript(url)
    {
    var script=document.createElement("script");
    script.type="text/javascript";
    script.src=url+"?v="+Date.now();
    document.body.appendChild(script);
    }

    function loadStyle(url)
    {
    var link=document.createElement("link");
    link.rel="stylesheet";
    link.type="text/css";
    link.href=url+"?v="+Date.now();
    var head=document.getElementsByTagName("head")[0];
    head.appendChild(link);
    }

    17、当默认事件用 return false阻止不了时:

    请用:  window.event.returnValue = false;

    18、Object.keys(object)获取对象的所有属性和方法名称。返回值:一个数组,其中包含对象的可枚举属性和方法的名称。

    备注对象的属性不仅可以使用“.”获取,还可以使用[属性名称]获取  并且后者支持更强大,支持变量,支持属性名为数值。

    19、js中的this工作原理:

    1)全局范围内|函数调用foo():this指向全局对象即window

    2)对象方法调用:this指向该对象  如test.foo();  方法中this则指向test对象

    3)调用构造函数  this指向新创建的对象

    4)当使用 Function.prototype 上的 call 或者 apply 方法时,函数内的 this将会被 显式设置为函数调用的第一个参数。

    function foo(a, b, c) {}
     
    var bar = {};
    foo.apply(bar, [1, 2, 3]); // 数组将会被扩展,如下所示
    foo.call(bar, 1, 2, 3); // 传递到foo的参数是:a = 1, b = 2, c = 3
    此时foo函数中的this都是bar对象

    20、js中变量 作用域:

    //js是没有块级作用域的 如在if代码块内定义的变量 在其外部同一作用域内同样可访问
    //js只有两种作用域: 函数作用域(即局部作用域)和全局作用域。而局部变量只能通过,一个是作为函数参数,另一个是函数内部通过 var 关键字声明。当全局变量和局部变量同名时两者互不影响。
    //js变量声明会被提前的 但赋值不会 即一个作用域内任何地方声明的变量 在这个作用域内任何地方都可以访问。

    21、全局变量和window属性的区别:

    全局变量不能用delete删除  window属性则可以

    访问一个不存在的全局变量会报“Uncaught ReferenceError: ** is not defined”错误 ,而以window属性的方式访问不存在的对象只会返回undefined 不会报错(所以建议用window.xx)



      
      

  • 相关阅读:
    keepalived排错
    shell脚本记录
    mysql(mariadb)主从配置
    添加硬盘设备
    天数
    centos7网络配置总结
    Keepalibed监控nginx
    zabbix安装
    基于JWT的web api身份验证及跨域调用
    C# webapi 权限验证
  • 原文地址:https://www.cnblogs.com/lxf1117/p/4092588.html
Copyright © 2011-2022 走看看