json和ajax简单面试题

本文探讨了JSON的基础知识,包括其在JavaScript中的应用。接着分析了Ajax的基本概念,如何创建Ajax请求,以及解决浏览器缓存的方法。同时,讨论了同步与异步的区别,并指出在前端开发中异步请求的重要性。此外,还提到了跨域问题的解决策略和编码不一致情况的处理。最后,简要介绍了模块化开发、AMD和CMD规范以及ECMAScript6的新特性,如类(class)的引入和异步加载JS的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • JSON 的了解?

     JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
     它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小
     如:{"age":"12", "name":"back"}
    
     JSON字符串转换为JSON对象:
     var obj =eval('('+ str +')');
     var obj = str.parseJSON();
     var obj = JSON.parse(str);
    
     JSON对象转换为JSON字符串:
     var last=obj.toJSONString();
     var last=JSON.stringify(obj);
    
  • [].forEach.call($$("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)}) 能解释一下这段代码的意思吗?

  • js延迟加载的方式有哪些?

     defer和async、动态创建DOM方式(用得最多)、按需异步载入js
    
  • Ajax 是什么? 如何创建一个Ajax?

     ajax的全称:Asynchronous Javascript And XML。
     异步传输+js+xml。
     所谓异步,在这里简单地解释就是:向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果它自己会根据设定进行后续操作,与此同时,页面是不会发生整页刷新的,提高了用户体验。
    
     (1)创建XMLHttpRequest对象,也就是创建一个异步调用对象
     (2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
     (3)设置响应HTTP请求状态变化的函数
     (4)发送HTTP请求
     (5)获取异步调用返回的数据
     (6)使用JavaScript和DOM实现局部刷新
    
  • Ajax 解决浏览器缓存问题?

      1、在ajax发送请求前加上 anyAjaxObj.setRequestHeader("If-Modified-Since","0")。
    
      2、在ajax发送请求前加上 anyAjaxObj.setRequestHeader("Cache-Control","no-cache")。
    
      3、在URL后面加上一个随机数: "fresh=" + Math.random();。
    

       4、在URL后面加上时间戳:"nowtime=" + new Date().getTime();。

    5、如果是使用jQuery,直接这样就可以了 $.ajaxSetup({cache:false})。这样页面的所有ajax都会执行这条语句就是不需要保存缓存记录。
  • 同步和异步的区别?

    同步的概念应该是来自于OS中关于同步的概念:不同进程为协同完成某项工作而在先后次序上调整(通过阻塞,唤醒等方式).同步强调的是顺序性.谁先谁后.异步则不存在这种顺序性.

    同步:浏览器访问服务器请求,用户看得到页面刷新,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作。

    异步:浏览器访问服务器请求,用户正常操作,浏览器后端进行请求。等请求完,页面不刷新,新内容也会出现,用户看到新内容。

    (待完善)

  • 如何解决跨域问题?

     jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面
    
  • 页面编码和被请求的资源编码如果不一致如何处理?

  • 模块化开发怎么做?

    立即执行函数,不暴露私有成员

         var module1 = (function(){
             var _count = 0;
             var m1 = function(){
               //...
             };
             var m2 = function(){
               //...
             };
             return {
               m1 : m1,
               m2 : m2
             };
           })();
    

    (待完善)

  • AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)规范区别?

    AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMD

    CMD 规范在这里:https://github.com/seajs/seajs/issues/242

     Asynchronous Module Definition,异步模块定义,所有的模块将被异步加载,模块加载不影响后面语句运行。所有依赖某些模块的语句均放置在回调函数中。
    
      区别:
    
         1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible.
         2. CMD 推崇依赖就近,AMD 推崇依赖前置。看代码:
    
     // CMD
     define(function(require, exports, module) {
         var a = require('./a')
         a.doSomething()
         // 此处略去 100 行
         var b = require('./b') // 依赖可以就近书写
         b.doSomething()
         // ...
     })
    
     // AMD 默认推荐
     define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
         a.doSomething()
         // 此处略去 100 行
         b.doSomething()
         // ...
     })
    
  • requireJS的核心原理是什么?(如何动态加载的?如何避免多次加载的?如何 缓存的?)

     参考:http://annn.me/how-to-realize-cmd-loader/
    
  • JS模块加载器的轮子怎么造,也就是如何实现一个模块加载器?

  • 谈一谈你对ECMAScript6的了解?

  • ECMAScript6 怎么写class么,为什么会出现class这种东西?

  • 异步加载JS的方式有哪些?

       (1) defer,只支持IE
    
       (2) async:
       (3) 创建script,插入到DOM中,加载完毕后callBack
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值