一、 javascript中的typeof返回哪些数据类型?

建议回复:

  typeof 运算符把类型信息当作字符串返回。typeof 返回值有六种可能: number, string, boolean,object,function, 和undefined.但是如果是数据类型的话应该还要包括一种 null,它的返回值类型是object.

二、 如何判断某变量是否为数组数据类型?

建议回复:

  instanceof 可以通过这个关键字确定某个对象是否是一个数组,如果是数组,返回true,否则返回false.用typeof只能测出一个数组是一个对象,而非数组.instanceof的用法:boolean flag = str instanceof String;     boolean flag = arr instanceof Array;

三、 例举js中 3种强制数据类型转换,2种隐式数据类型转换?

建议回复:

  (1)强制转换

var a = 10;
var b = a.toString(); // 把数字转换为字符串
alert( typeof b );   
a = "10";
b = Number(a); // 把字符串转换为数字
alert( typeof b );

  除此之外还有 Boolean、parseInt、parseFloat等等

  (2)隐式转换 

var a = 10;
var b = ""+a; // 把数字转换为字符串
alert( typeof b );
a = "10";
b = a*1;
alert( typeof b ); // 把字符串转换为数字

四、 split() 和 join() 的区别?

建议回复:

  split()是字符串的操作方法,根据给定的字符将一个字符串切割成数组.  语法: str.split("字符").

  join()是数组的操作方法,将一个数组根据给定的字符连接成字符串.   语法:arr.join("字符").

五、 jsonp如何实现跨域?

建议回复:

  jsonp跨域的原理: 通过动态创建script标签,然后设置src的路径为服务器提供的接口路径,通过一个回调函数callback将服务器信息返回。

  

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="button" value="jsonp的跨域访问数据" id="btn" />
</body>
</html>
<script>
function data(result){
console.log(result);
}
document.getElementById("btn").onclick=function(){
var script=document.createElement("script");
script.type="text/javascript";
script.src="http://api.k780.com:88/?app=weather.future&weaid=1&appkey=22429&sign=c40ab8059466430ccc34526cb8d94a6b&format=json&jsoncallback=data";
document.body.appendChild(script);
}
</script>

六、 什么是同源策略?

建议回复:

  所谓的同源 就是指 ajax在请求数据时, 保证  协议、域名、端口号 完全一致,才能够通过请求。

  ajax不能实现跨域请求数据(受同源策略的影响不能实现跨域)。

七、 同步和异步的区别?

建议回复:
  • 首先同步异步于阻塞非阻塞并没有关系。同步异步主要是事情做完以后,如何进行处理、或者说关注的是一种消息通信机制。
  • 同步的情况下,是由处理消息者自己去等待消息是否被触发;
  • 而异步的情况下是由触发机制来通知处理消息者;
  • 异步:同时执行,也叫并发执行(生活中的同步),如定时器就是异步的;同步就是顺序执行。

举例: 比如在上课时,你问老师一个问题,这个问题可能需要花费一点时间去思考,这个时候老师可能:

  1. 思考,思考……,好了,有答案了;
  2. 这个问题需要一点时间,你先做点别的,等我想好了,去找你。

第一种就是同步,第二种就是异步。所以同步异步可以说是对被请求方来说的,被请求者使用什么方式来告知处理结果。

  • 阻塞非阻塞,主要是对于请求者而言的。
  • 阻塞:发出请求等待结果返回,然后再处理后续的事情;
  • 非阻塞:发出请求不等待结果返回,可以接着做后续的事情;

举例,还是上一个例子:

  1. 老师在使用同步思考的时候,你可以静静的等待老师给出答案,也可以边做自己的事情边等待老师的回答,当然这时候你需要时刻去关注老师是否已经想好了,在程序中需要进行轮询了。乀(ˉεˉ乀)
  2. 老师使用异步的方式,这个时候老师告诉你可以先去做别的,好了就通知你,那么你可以去做点别的,然后监听事件就行,当然你也可以很轴,我就不做别的!我要一直等着老师“想好了”的事件发生。
  3. 所以同步可以是阻塞的也可以是非阻塞的,异步也是如此。

八、 进程和线程

建议回复:  
1.定义

  进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动进程是系统进行资源分配和调度的一个独立单位.

  线程是进程的一个实体, 是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

2.关系

  一个线程可以创建和撤销另一个线程 同一个进程中的多个线程之间可以并发执行.

  相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

3.区别

  进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

  1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

  2) 线程的划分尺度小于进程,使得多线程程序的并发性高。

  3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

  4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

  5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。

  这就是进程和线程的重要区别。

4.优缺点
  线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在机器上运行,而进程则可以跨机器迁移。

九、 ajax的相关

1.ajax的定义

  异步的javascript and xml,是一种提供动态交互的网页开发技术。

2.ajax的作用

  当向后台发送少量的数据时,通过ajax技术可以实现页面的局部刷新,提高程序的运行效率。ajax技术可以实现整个页面的无刷新。

3.ajax的请求方式

  get方式,从服务器获取数据,传送的数据量小,安全性低.

  post方式,向服务器发送数据,输送的数据量没有要求 安全性高.

4.ajax请求数据的过程

  (1)、准备一个ajax对象
  兼容写法:
       if( window.XMLHttpRequest ){
            ajax = new XMLHttpRequest();
       }else{
            ajax = new ActiveXObject("Microsoft.XMLHTTP");
       }
 
  (2)、和服务器建立连接 --  通过  open方法
   ajax.open("get","url",true);
  第一个参数:  请求方式
  第二个参数:  请求路径
  第三个参数:  同步还是异步    true 表示异步
 
  (3)、发送数据   
   ajax.send();
 
  (4)、服务器相应数据 并将处理的结果返回给客户端
       通过 onreadystatechange 事件 相应服务器 的数据
       根据readyState 判断状态值    值为4请求服务器成功
       根据status 判断状态码        值为200 交易成功
       通过responseText 属性获取服务器传递的数据
 
       ajax.onreadystatechange = function(){
                if( ajax.readyState == 4 ){
                     if( ajax.status == 200 ){
                          //交易成功  返回数据
                          alert( ajax.responseText );//服务器将处理的结果 通过responseText属性返回给客户端
                     }
                }
            }
  <script type="text/javascript">
     //1 创建一个ajax对象
//var ajax = new XMLHttpRequest();
//var ajax = new ActiveXObject("Microsoft.XMLHTTP");
var ajax = null; if( window.XMLHttpRequest ){
ajax = new XMLHttpRequest();
}else{
ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
//2 和服务器建立连接
ajax.open("get","data.txt",true); //4 服务器相应数据 并将处理的结果返回给客户端
ajax.onreadystatechange = function(){
if( ajax.readyState == 4 && ajax.status == 200 ){//交易成功 返回数据
alert( ajax.responseText );//服务器将处理的结果 通过responseText属性返回给客户端
}
}
//3 发送数据
ajax.send();
  </script>

十、封装ajax并应用

 封装的ajax请求代码ajaxGET.js

// url :请求路径
// callback : 该参数是一个函数,回调函数
function ajaxGet(url,callback){
var ajax = null;
if( window.XMLHttpRequest ){
ajax = new XMLHttpRequest();
}else{
ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
ajax.open("GET",url,true);
ajax.onreadystatechange = function(){
if( ajax.readyState == 4 && ajax.status == 200 ){
if(callback){
callback(ajax.responseText);//通过函数的调用将服务器处理的结果以参数形式传递给前端
}
}
}
ajax.send();
}

对上面封装函数的应用

selectCard.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
.box {
width: 400px;
margin:100px auto;
border:1px solid #ccc;
}
.top button.purple {
background-color: purple;
}
.bottom div{
width:100%;
height: 300px;
background-color: pink;
display: none;
} .bottom div.show{
display:block;
} </style>
<script src="ajaxGET.js"></script>
</head>
<body>
<div class="box">
<div class="top">
<button class="purple">第一个</button>
<button>第二个</button>
<button>第三个</button>
<button>第四个</button>
<button>第五个</button>
</div>
<div class="bottom" id="divs">
<div class="show" id="show">1好盒子</div>
</div>
</div>
</body>
</html>
<script>
//请求后台时 传递当前点击的按钮下标
var oBtns = document.getElementsByTagName("button");
var oDiv = document.getElementById("show");
for (let i = 0 ; i < oBtns.length ; i++) {
oBtns[i].onclick = function(){
url="selectCard.php?id="+i;
ajaxGet(url,function(msg){
oDiv.innerHTML=msg;
});
}
}
</script>

selectCard.php

<?php
$id=$_GET["id"];
$arr=array("dancer1","dancer2","dancer3","dancer4","dancer5");
echo $arr[$id];
?>

十一、GET和POST的区别,何时使用POST?

建议回复:

  GET和POST的区别:

  GET:一般用于查询数据,使用URL传递参数,由于浏览器对地址栏长度有限制,所以对使用get方式所发送信息的数量有限制,同时浏览器会记录(历史记录,缓存)中会保留请求地址的信息,包括地址后面的数据。get 只能发送普通格式(URL 编码格式)的数据。

  POST:一般用于向服务器发送数据,对所发送的数据的大小理论上是没有限制,浏览器会缓存记录地址,但是不会记录 post 提交的数据。post 可以发送纯文本、URL编码格式、二进制格式的字符串,形式多样。

  在以下情况中,请使用 POST 请求:

  1. 以提交为目的的请求(类似语义化,get 表示请求,post 表示提交);
  2. 发送私密类数据(用户名、密码)(因为浏览器缓存记录特性);
  3. 向服务器发送大量数据(数据大小限制区别);
  4. 上传文件图片时(数据类型区别);

get请求案例:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="text" id="txt" />
<div id="d"></div>
</body>
</html>
<script type="text/javascript">
//失去焦点时,判断用户名的唯一性
oTxt = document.getElementById("txt");
oDiv = document.getElementById("d");
oTxt.onblur = function(){
var ajax = new XMLHttpRequest();
ajax.open("GET","checkname.php?username="+oTxt.value,true);
ajax.onreadystatechange = function(){
if(ajax.readyState == 4 && ajax.status == 200){
oDiv.innerHTML = ajax.responseText;
}
}
ajax.send();
}
</script>

后台模拟数据库代码:

<?php
//后台实现唯一性验证
//服务器接收客户端请求的数据
$uname = $_GET["username"];
$arr = array("admin","xm","xh");//数组模拟数据库 //判断$uname 在 $arr 中是否存在 $flag = true;//定义一个开关 值为true表示用户名不存在 可以注册
foreach( $arr as $v ){
if( $uname == $v ){ //说明用户名存在
$flag = false;
break;
}
}
//判断flag值 如果为true,返回 可以注册
if( $flag ){
echo "可以注册";
}else{
echo "用户名已存在,换一个 ";
}
?>

post请求案例

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="button" value="ajax请求" id="btn" />
</body>
</html>
<script>
document.getElementById("btn").onclick=function(){
var ajax=new XMLHttpRequest();
ajax.open("POST","postRequest.php",true); //设置请求头:
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); ajax.send("uname=admin&upwd=123");
ajax.onreadystatechange=function(){
if(ajax.readyState==4&&ajax.status==200){
switch(ajax.responseText){
case "0":alert("登录失败");break;
case "1":alert("登录成功");break;
}
}
}
}
</script>

后台代码:

<?php
$name=$_POST["uname"];
$pwd=$_POST["upwd"];
if($name=="admin"&&$pwd=="123"){
echo 1;
}else{
echo 0;
}
?>

既然模拟了后台数据库,当然现实是不会让你模拟的,只会提供一个接口,那么我们就再来看看这种情况,给你个接口自己体会http://datainfo.duapp.com//shopdata//datainfo.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
用户名:<input type="text" id="txtName"/>
密码:<input type="text" id="txtPwd"/>
<input type="button" value="注册" id="btn"/>
<div id="reg"></div>
<hr />
用户名:<input type="text" id="tname" />
密码:<input type="text" id="tpwd" />
<input type="button" value="登录" id="btn2"/>
<div id="login"></div>
</body>
</html>
<script type="text/javascript">
//http://datainfo.duapp.com//shopdata//datainfo.html
function $(id){
return document.getElementById(id);
} $("btn").onclick = function(){
var ajax = new XMLHttpRequest();
var data = "status=register&userID="+$("txtName").value+"&password="+$("txtPwd").value;
ajax.open("GET","http://datainfo.duapp.com/shopdata/userinfo.php?"+data,true);
ajax.onreadystatechange = function(){
if( ajax.readyState==4 && ajax.status == 200 ){
switch(ajax.responseText){
case "0":$("reg").innerHTML = "用户名重名";break;
case "1":$("reg").innerHTML = "注册成功";break;
case "2":$("reg").innerHTML = "数据库错误";break;
}
}
}
ajax.send();
} $("btn2").onclick=function(){
var ajax = new XMLHttpRequest();
var data = "status=login&userID="+$("tname").value+"&password="+$("tpwd").value;
ajax.open("GET","http://datainfo.duapp.com/shopdata/userinfo.php?"+data,true);
ajax.onreadystatechange = function(){
if( ajax.readyState==4 && ajax.status == 200 ){
switch(ajax.responseText){
case "0":$("login").innerHTML = "用户名不存在";break;
//case "1":$("login").innerHTML = "登录成功";break;
case "2":$("login").innerHTML = "用户名密码不符";break;
default:$("login").innerHTML = "登录成功"+ajax.responseText; }
}
}
ajax.send();
} </script>

十二、 AJAX 的局限性?

建议回复:
  1. AJAX 不支持浏览器 back 按钮。
  2. 安全问题 AJAX 暴露了与服务器交互的细节。
  3. 对搜索引擎的支持比较弱。不会执行你的 JS 脚本,只会操作你的网页源代码;
  4. 跨域请求有一定限制。解决方式:jsonp;

js常见知识点1.ajax相关的更多相关文章

  1. js常见知识点2.面向对象相关

    一.对象的概念 建议回复: 对象是一个整体,对外提供一些功能. 一切具有属性和方法的事物. 一切具有本质特征和行为的物质. 数据类型:       所有的基本数据类型都没有属性和方法.       所 ...

  2. HTML+CSS+js常见知识点

    一.HTML.CSS常见知识点 1.垂直居中盒子 /* 方法一 */ html, body { width: 100%; height: 100%; padding: 0; margin: 0; } ...

  3. js常见知识点3.面向对象之继承、设计模式

    一.面向对象的三大特征 建议回复: 封装:屏蔽内部细节.调用外部接口实现对应功能(函数调用) 继承:子类继承父类中的属性和方法 多态(js中不存在多态的概念) 二.继承 建议回复: 继承:子类继承父类 ...

  4. 【HTTP】HTTP 的15个常见知识点复习

    前言 自从入职新公司到现在,我们前端团队内部一直在做 ?每周一练 的知识复习计划,我之前整理了一个 每周一练 之 数据结构与算法 学习内容,大家也快去看看~~ 最近三周,主要复习 网络基础 相关的知识 ...

  5. 【HTTP】267- HTTP 的15个常见知识点复习

    前言 自从入职新公司到现在,我们前端团队内部一直在做 ?每周一练 的知识复习计划,我之前整理了一个 [每周一练 之 数据结构与算法] (https://juejin.im/post/5ce2a20e6 ...

  6. JS重要知识点

    这里列出了一些JS重要知识点(不全面,但自己感觉很重要).彻底理解并掌握这些知识点,对于每个想要深入学习JS的朋友应该都是必须的. 讲解还是以示例代码搭配注释的形式,这里做个小目录: JS代码预解析原 ...

  7. JS重要知识点(转载 学习中。。。)

    这里列出了一些JS重要知识点(不全面,但自己感觉很重要).彻底理解并掌握这些知识点,对于每个想要深入学习JS的朋友应该都是必须的. 讲解还是以示例代码搭配注释的形式,这里做个小目录: JS代码预解析原 ...

  8. touch.js——常见应用操作

    touch.js--常见应用操作 基本事件: touchstart   //手指刚接触屏幕时触发 touchmove    //手指在屏幕上移动时触发 touchend     //手指从屏幕上移开时 ...

  9. JS 进阶知识点及常考面试题

    将会学习到一些原理相关的知识,不会解释涉及到的知识点的作用及用法,如果大家对于这些内容还不怎么熟悉,推荐先去学习相关的知识点内容再来学习原理知识. 手写 call.apply 及 bind 函数 涉及 ...

随机推荐

  1. vi/vim 命令速查手册

    vi 的基本概念 基本上vi可分为三种操作状态,分别是命令模式(Command mode).插入模式(Insert mode)和底线命令模式(Last line mode),各模式的功能区分如下: 1 ...

  2. python的反射函数(hasattr()、getattr()、setattr()与delattr())和类的内置属性attr(__getattr()__、__setattr()__与__delattr()__)

    主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省),有四个可以实现自省函数. hasattr(object,name) 判断object中是否有name字符串对应的属性或方法,返回Tr ...

  3. 【Logstash系列】使用Logstash作为收集端采集IIS日志

    现阶段Logstash在Windows端的日志采集一直存在若干问题,包括:   1. LS有读锁:进程开启后Input指定路径下的所有文件都会被锁死无法重命名或删除. 2. LS不识别*:如果在pat ...

  4. 【题解】Luogu P3217 [HNOI2011]数矩形

    原题链接:P3217 [HNOI2011]数矩形 什么??!怎么又是计算几何,您钛毒瘤了-- 这道题真的是毒瘤 凸包?旋转卡壳? 看一下数据,N<=1500? 暴力 没错,就是暴力,N^2没毛病 ...

  5. XXX银行项目部署

    XXX银行项目部署 一.下载项目代码 1.使用git工具下载代码 代码路径:推荐代码下载到桌面 git clone http://sunyard_姓名拼音@bitbucket.devops.hfdev ...

  6. jmeter的使用

    jmeter:java开发的开源的性能测试工具. *jmeter返回中文乱码: 1.在jmeter的bin目录下,找到jmeter的配置文件,jmeter.properties,然后把samplere ...

  7. WIN10安装和使用MySql5.6中遇到的一些问题与解决

    WIN10安装和使用MySql5.6中遇到的一些问题与解决 提示一下,安装前需要安装python环境. MySql安装缺少组件MySQL for Excel 如图(转载别人的图,自己的安装时没有截图) ...

  8. 网络对抗——web基础

    网络对抗--web基础 实践内容 (1)Web前端HTML (2)Web前端javascipt (3)Web后端:MySQL基础:正常安装.启动MySQL,建库.创建用户.修改密码.建表 (4)Web ...

  9. Chrome视频解析插件

    我们在观看一些平台的视频资源时,比如优酷视频.腾讯视频.爱奇艺等等,通常都会需要VIP资格才能观看到更稀缺的视频,如何通过破解来实现免VIP观看呢?下面我们来看一看怎么用Chrome插件实现. 视频解 ...

  10. Golang踩坑录 两种方式来读取文件一行所导致的问题

    前两天零零碎碎看完了golang的基础,想着找个小项目练练手,可是出现了一个十分棘手的问题 我要做的东西是网站路径爆破 所以我会从文本字典中把一行行路径读取然后与域名拼接,但是我在跑起程序后出现了问题 ...