由几道JS笔试题引发的知识点探究一——JS有哪些全局函数?

  首先要明确什么是JS。各位读者肯定都是在学习和研究JS的,或是菜鸟或是大牛,但是你考虑过什么是JS吗?乍一看来我这问题有点死抠字眼的味道,但在学习一门语言的时候就必须有这种打破沙锅问到底的精神。只有这样才能学得深入,才能学到这门语言的本质。几句絮叨之后,我们回到之前的问题——什么是JS?我们挂在嘴边的JS实际上有两种含义——一,ECMAScript,也就是所谓的JS标准;二,宿主环境中的JS,因为JS基本上是用于web开发的(JS官方称JS为"language of the web"),所以实际上也就是各大浏览器环境中的JS。既然有两种JS,那这道题自然也就有两种答案了。

  一、ECMAScript。

  有些文章里说ECMAScript所谓的全局函数和内置对象的函数或属性是不同的概念,全局函数是不属于任何对象的。我认为这种说法是错误的,但同时也是正确的。先说它错误的一面。按照ECMAScript5标准,全局函数也是内置对象的属性,这个内置对象就是所谓的全局对象(The Global Object)。标准原文解释说,"The unique global object is created before controls enters execution context"。这里就引出了全局对象的第一个特点——独一无二,也就是说你不可能用某种构造函数再创建一个全局对象出来。 好了,我们已经明确了全局函数是全局对象的属性,也就说明了前面那句话的错误性。那我为什么又说它也是正确的呢?因为标准里面一提到全局对象就用“The Global Object”,这个独一无二的全局对象连个变量名都没有,是个只知其人不知其名的家伙,因此我们永远都不可能在代码里面直接用这个家伙,那忽略这个对象的存在又有何妨呢?所以我说前面那句话也有一定的正确性。

  OK,接下来我们来研究究竟有哪些全局函数/属性(很多地方就这个问题给了个看似完整的列表,但实际上都不完整,下面我们就完全按照ECMAScript5标准来解释这个问题)。

  1. 值属性

    1.1 NaN

      NaN属性的值是NaN。

    1.2 Infinity

      Infinity属性的值是+∞。

    1.3 undefined

      undefined属性的值是undefined。

    这三个属性是干嘛用的呢——嘛都不干,至少我觉得没毛用,标准里也是一句话带过,存在感太低。

  2. 函数属性

    2.1 一般函数

      2.1.1 eval(x)

       如果x是不是字符串,直接返回x本身;如果x是字符串,则将这个字符串解析为一段ECMAScript代码(如果无法正确解析,抛出错误),然后为这段代码新建一个执行环境并执行这段代码,最后返回执行结果。

      2.1.2 parseInt(string,radix)

      关于这个函数有很多可以说的,限于篇幅这里只提两点:一,parseInt(‘‘)和parseInt(‘null‘)均返回NaN;二,在JS解析器自动执行强制转型时,执行的是Number()函数而不是parseInt()。

      2.1.3 parseFloat(string)

      和parseInt()最明显的差别就是没有radix参数,也就是说parseFloat()只能按十进制进行数字转换。

      2.1.4 isNaN(number)

      2.1.5 isInfinity(number)

        上面两个函数只要记住才对number尽心强制转型的时候调用的是Number()。

    2.2 处理URI的函数

      2.2.1 decodeURI(encodedURI)

      2.2.2 decodeURIComponent(encodedURIComponent)

      2.2.3 encodeURI(uri)

      2.2.4 encodeComponent(uriComponent)

         JS对URI的处理也不是三言两语就能说清楚的问题,这里就不叙述了,留待日后详细研究。

    2.3 构造函数

     这里就是JS内置类型的构造函数了,它们也都是全局函数,每一个都值得深入探讨,这里只做一个简单罗列:

    Object() Function() Array() String() Boolean() Number() Date() RegExp() Error() EvalError() RangeError() ReferenceError() SyntaxError() TypeError() URIError()

  2.4 其他属性

  其他还有两个:Math和JSON,想必也是耳熟能详的两个家伙,具体研究也就留待日后了。

  好了,到这里一切就很清楚了。按ECMAScript5的标准,如果除去那一大堆构造函数以外,全局函数共有九个,分别是:eval() parseInt() parseFloat() isNaN() isInfinite() decodeURI() decodeURIComponent() encodeURI() encodeURIComponent()。

  OK,ECMAScript5的全局函数到此讲完。

二、浏览器中的JS

  浏览器中的JS是ECMAScript标准的具体实现,它不仅基本符合ECMAScript标准,而且添加了许多在标准之外但有十分有用的特性(这些特性估计早晚也会成为标准的一部分)。就全局对象而言,前面我们说过,在ECMAScript标准的表述中,它是没有名字的,但浏览器给它起了名字——window,用于代表浏览器访问网页的web窗口,想必大家也是耳熟能详。在浏览器中,一切全局函数和变量都是作为window的属性而存在的(window本身也是window的属性,属性值还是window)。window除了具备上面所提到的ECMAScript标准中要求实现的所有属性之外,还添加了N多属性(打开谷歌,按下F12,点击console面板,输入 window. ,出来的那一大堆提示项就是全局属性啦)。这N多属性里面又有N多函数属性,要想一下讲完恐怕得讲个三天三夜了,下面罗列一些我个人认为比较常用的并就此结束此文。

  moveTo() moveBy() resizeTo() resizeBy() open() setTimeout() setInterval() alert() confirm() prompt() console.log()

时间: 2024-10-12 02:38:03

由几道JS笔试题引发的知识点探究一——JS有哪些全局函数?的相关文章

由几道JS笔试题引发的知识点探究

1.JS有哪些全局函数? 2.alert('5'+5) 3.cookie.sessionStorage和localStorage的区别 4.call()和apply()方法的区别 5.严格模式和非严格模式有什么区别?严格模式有什么优缺点? 6.JS正则表达式 7.创建一个ul元素添加到body元素中,ul元素包含5个li元素,每个li元素有一个Text类型的子节点 8.sort()方法的应用 9.使用原生JS实现一个可拖拽的DIV 10.用AJAX判断浏览器是IE还是FireFox 11.异步加

由几道JS笔试题引发的知识点探究十五——JS面向对象编程

JS初学者大都没有认识到其强大的面向对象编程的特性,只是把JS当作一门简单实用的脚本语言来用.也正因如此,JS程序员往往处于程序员鄙视链的最低端,很多人觉得JS是HTML一类的语言,甚至连语言都称不上.事实完全不是如此,你若也有这种想法,说明你对JS的认识太浅薄了.要想正真迈入JS的大门,你必须深入了解JS面向对象编程的特性.下面就让我为大家一一道来. 一.创建对象 既然是面向对象,那肯定先得有对象吧,要有对象,肯定得知道对象是什么吧,那JS中的对象是什么呢?在C++里我们知道,对象就是类或结构

由几道JS笔试题引发的知识点探究二——强制类型转换

强制类型转换的概念相信大家一定不陌生,例如整数和浮点数进行算术运算,整数会在后台转型为浮点数.JS作为一门弱类型的动态脚本语言,任何两种数据类型之间都可以进行性转换而不会报错,这就带来了一整套错综复杂的类型转换规则.例如我们的题目 alert('5'+5),大家都知道答案是'55',但为什么这里不将string转换成number而要将number转换成string呢?在其他情况下也都要将string转型成number吗?下面我们就来做一次完整的总结. 一.何时转型为boolean? 1. 逻辑非

阿里2道前端笔试题+堆糖2道前端笔试题

阿里前端笔试题 1.一个表格HTML代码如下 <table id="table1"> <tbody> <tr><td>1</td><td><button>Delete</button></td></tr> <tr><td>2</td><td><button>Delete</button></

容易答错的JS笔试题

1,考察this var length = 10 function fn(){     alert(this.length) } var obj = {     length: 5,     method: function(fn) {         fn() // ?         arguments[0]() // ?     } } obj.method(fn) 这里的坑主要是arguments,我们知道取对象属于除了点操作符还可以用中括号,这里fn的scope是arguments,即

JS笔试题

1,考察this var length = 10function fn(){ alert(this.length)}var obj = { length: 5, method: function(fn) { fn() // ? arguments[0]() // ? }}obj.method(fn)这里的坑主要是arguments,我们知道取对象属于除了点操作符还可以用中括号,这里fn的scope是arguments,即fn内的this===arguments,调用时仅传了一个参数fn,因此le

几道C笔试题

Q:printf和scanf的返回值是什么? int main() { int i = 43; int n = printf("%d\n",i); printf("%d\n",n); return 0; } A:printf函数返回3,因为其输出了'4', '3', '\n' 三个字符. printf返回的是成功输出到STDOUT的字符数.如果发生错误,返回一个负数. scanf返回的是成功赋值的变量个数,如果发生错误,返回EOF Q:既然fgetc是接收输入的字符

算法--两道百度笔试题

算法--两道百度笔试题 今天看到一位园友写了一篇关于百度的面试题的博客,成了评论头条,再下看了一下,非常感兴趣,那位博主的算法能力跟我一样需要提高,估计他的功力还在我之下,所以再下不才,在这里把自己的源码贴出来. 百度面试题(一):假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数和正数间元素相对位置不变.时空复杂度要求分别为:o(n)和o(1).          其实开始的时候我也是一头雾水,在纸上画画之后发现,其实就是一道变形的插入排序.幸运的是

精选30道Java笔试题解答

个人觉得整理的超级好的Java笔试题,原文请见 http://blog.csdn.net/lanxuezaipiao/article/details/16753743 1. 下面哪些是Thread类的方法() A start()       B run()       C exit()       D getPriority() 答案:ABD 解析:看Java API docs吧:http://docs.oracle.com/javase/7/docs/api/,exit()是System类的方