zoukankan      html  css  js  c++  java
  • JavaScript学习(一)——基础知识查漏补缺

    标签script

    我们知道,html要使用js就要使用<script>标签。 
    两种方式: 
    一是直接在<script>这里</script>写入代码。 
    二是在别的文件写好js代码,然后script标签的src属性引入进来。

     

    script其实有6个属性(全都是可选):

    1. src:包含要执行代码的外部文件;
    2. language:现在已废弃;
    3. type:表示编写代码使用的脚本语言的内容类型;
    4. charset:指定src引入代码的字符集;
    5. async:表示应该立即下载脚本;
    6. defer:表示脚本可以延迟到文档完全被解析和显示后再执行。

      type的解释也说明了一个问题,<script></script>中间的代码不必需是js代码。如果不声明,则默认为text/javascript,此时代码按照js的规则解析。如果声明了其他的不可识别的类型,则它和其中的内容会被忽略掉。 
      例如: 
      <script type='text/html' id="tpl"></script> 
      <script type='text/foo-template' id="foo-tpl"></script> 
      有些模板引擎就利用了它来实现DOM节点的模板填充。

    注意:<script><script> 中间不要在任何地方出现'</script>'字符串

     

    关键字,保留字

    以前只记住了几个关键字,现在还注意到了保留字,保留字就是在js当中其实没啥用的但是就是不给用来当做命名的单词,多为Java语言的关键字。

     

    数据类型

    typeof操作符,可以判断某值的数据类型。我们都知道,一共六种。 
    1、undefined 
    2、boolean 
    3、string 
    4、number 
    5、function 
    6、object

     

    undefined与null

    undefined 指变量尚未初始化 
    null 指变量值为一个空对象指针 
    其实它们的意思和用法基本都是一致的,在js里,我们完全可以只用undefined而不去使用null,这样混不混淆都无所谓了。 
    唯一的区别: 
    console.log(typeof undefined)--undefined 
    console.log(typeof null)--object

    阮一锋的解释: 
    null表示"没有对象",即该处不应该有值。典型用法是:

    (1) 作为函数的参数,表示该函数的参数不是对象。 
    (2) 作为对象原型链的终点。

    Object.getPrototypeOf(Object.prototype)
    // null
    

    undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是: 
    (1)变量被声明了,但没有赋值时,就等于undefined。 
    (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。 
    (3)对象没有赋值的属性,该属性的值为undefined。 
    (4)函数没有返回值时,默认返回undefined。

    var i;
    i // undefined
    
    function f(x){console.log(x)}
    f() // undefined
    
    var  o = new Object();
    o.p // undefined
    
    var x = f();
    x // undefined
    
     

    number

    转换数值的三个方法:

    Number(),parseInt(),pasreFloat()

    Number()功能比较强大,规则如下: 
    true:1 
    false:0 
    null:0 
    undefined:NaN 
    "":0 
    "011":11(忽略前面的0) 
    "011.1":11.1(忽略前面的0) 
    "0x11":17(0x开头十六进制) 
    "别的格式的字符":NaN

    parseInt()规则如下: 
    仅转换字符串,其他非数字类型统一返回NaN 
    "":NaN 
    "011":11(忽略前面的0) 
    "011.1":11(忽略前面的0) 
    "0x11":17 
    "123abc":123 
    "abc123":NaN

    parseFloat()规则如下: 
    仅转换字符串,其他非数字类型统一返回NaN 
    "":NaN 
    "011":11(忽略前面的0) 
    "011.1":11(忽略前面的0) 
    "0x11":0(忽略前面的0) 
    "123abc":123 
    "abc123":NaN

    整数还可以通过二进制,八进制,十六进制来表示。 
    其中,八进制字面值的第一位必须是0 
    十六进制字面值的前两位必须是0x

    我们从字符串转过来的时候如果有要求则要再传一位进制数: 
    parseInt("011",2):3 
    parseInt("011",8):9 
    parseInt("011",16):17 
    parseInt("0xaa",16):170 
    parseInt("aa",16):170

    注意:程序在计算的时候0开头的数字会被解析为八进制,0x开头的数字会被解析为十六进制。最终结果为十进制。因此,我们做计算的时候最好不要用带0开头的数字进行计算,避免让别人看迷糊

     

    等号

     

    一个等号:赋值 
    两个等号:判断相等 
    三个等号:判断全等

     

    一、赋值问题 
    在echarts.js源码中看到了一句:

    var ecModel = this._model = new GlobalModel(null, null, theme$$1, optionManager);
    

    其中连续赋值了两次,后来查阅资料,发现执行过程是这样的:

    1、var ecModel =new GlobalModel(null, null, theme$$1, optionManager);
    2、this._model = new GlobalModel(null, null, theme$$1, optionManager);
    

    连续多个赋值操作,可从左到右拆分成每个变量直接等于最后的值,而不会执行像var ecModel = this._model这样的语句。

    其实不推荐这样写,这种写法能避开就避开呗。

    二、关于 ==

    == 和 != 会先转换再比较

    比较规则: 
    1、一个布尔值,一个数字 true:1,false:0 
    2、一个字符串,一个数字 先转成数字 
    3、一个对象,一个数字 先调用对象的valueOf()再按前面的规则 
    4、两个对象 比较是否同一个对象 
    例: var a={},b={}; console.log(a==b);//false 
    5、null==undefined true 
    6、NaN==NaN false

     

    label 语句

    label语句可以在代码中添加标签,以便将来使用。一般与循环语句的break和continue配合使用。
    举个例子:
    我有一个嵌套循环,当满足条件的时候执行语句并跳出外层循环。
    var num=0;
    firstfor:
    for(var i=0;i<10;i++){
        secondfor:
        for(var j=0;j<10;j++){
            if(i==5 && j==5){
              break firstfor;//跳出第一个for循环
            }
            num++;
        }
    }
    alert(num); //num=55
    
     

    重载

     

    js没有重载!

    重载只在java里只说过,js没听说过。
    
    然而百度到的全都是js实现重载的方法。
    

    我的疑问(等待回答):

    既然js都不支持重载了,为什么还要特意去模仿实现重载呢?

  • 相关阅读:
    BZOJ 1412: [ZJOI2009]狼和羊的故事
    Bzoj 2443: [Usaco2011 Open]奇数度数
    Bzoj 1101: [POI2007]Zap
    BZOJ 2186: [Sdoi2008]沙拉公主的困惑
    BZOJ 4804: 欧拉心算 欧拉函数
    Luogu P3121 [USACO15FEB]审查(黄金)Censoring (Gold)
    Luogu P3000 [USACO10DEC]牛的健美操Cow Calisthenics
    BZOJ 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛
    BZOJ 3297: [USACO2011 Open]forgot
    BZOJ 2456: mode
  • 原文地址:https://www.cnblogs.com/qq765065332/p/9358400.html
Copyright © 2011-2022 走看看