<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[grbrb的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/grbrb</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; grbrb]]></copyright><item><title><![CDATA[javascriptajaxhttp请求头详细介绍]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/107424605</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/107424605</guid><author>grbrb</author><pubDate>Sat, 18 Jul 2020 10:02:52 +0800</pubDate><description><![CDATA[http请求中的常用头（请求头）的含义：
Accept：告诉服务器，客户端支持的数据类型。
   Accept-Charset：告诉服务器，客户端采用的编码。


   Accept-Encoding：告诉服务器，客户机支持的数据压缩格式。


   Accept-Language：告诉服务器，客户机的语言环境。


   Host：客户机通过这个头告诉服务器，想访问的主机名。


   If-Modified-Since:客户机通过这个头告诉服务器，资源的缓存时间。


   Referer:客户机通过这]]></description><category></category></item><item><title><![CDATA[javascriptajax总结]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/107412929</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/107412929</guid><author>grbrb</author><pubDate>Fri, 17 Jul 2020 17:06:06 +0800</pubDate><description><![CDATA[1、ajax是什么?
ajax: asynchronous javascript and xml: 异步的javascript和xml。
  ajax是一种用来改善用户体验的技术，其本质是利用浏览器内置的一种特殊的对象(XMLHttpRequest)异步(即发送请求时，浏览器不会销毁当前页面，用户可以继续在当前页面做其它的操作)的向服务器发送请求,并且利用服务器返回的数据(不再是一个完整的页面，只是部分的数据，一般使用文本或者xml返回)来部分更新当前页面。

  使用ajax技术之后，页面无刷新，并且不打]]></description><category></category></item><item><title><![CDATA[javascript里ajax中 get 和 post 的区别]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/107412681</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/107412681</guid><author>grbrb</author><pubDate>Fri, 17 Jul 2020 16:58:42 +0800</pubDate><description><![CDATA[首先看一下get、post的区别
1、 get是把参数5261数据队列加到提交表单的4102ACTION属性所指的URL中，值和表单内各个1653字段一一对应，在URL中可以看到。post是通过HTTP post机制，将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
2、 对于get方式，服务器端用Request.QueryString获取变量的值，对于post方式，服务器端用Request.Form获取提交的数据。两种方式的参数都可以用]]></description><category></category></item><item><title><![CDATA[javascriptajax中关于readystate五个状态总结如下]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/107412626</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/107412626</guid><author>grbrb</author><pubDate>Fri, 17 Jul 2020 16:57:29 +0800</pubDate><description><![CDATA[关于readystate五个状态总结如下：
readyState 状态 状态说明
(0)未初始化
此阶段确认XMLHttpRequest对象是否创建，并为调用open()方法进行未初始化作好准备。值为0表示对象已经存在，否则浏览器会报错－－对象不存在。
(1)载入
此阶段对XMLHttpRequest对象进行初始化，即调用open()方法，根据参数(method,url,true)完成对象状态的设置。并调用send()方法开始向服务端发送请求。值为1表示正在向服务端发送请求。
(2)载入完成
此阶段接收服务]]></description><category></category></item><item><title><![CDATA[javascriptDOM基本操作方法汇总]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/107349461</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/107349461</guid><author>grbrb</author><pubDate>Tue, 14 Jul 2020 22:45:40 +0800</pubDate><description><![CDATA[DOM基本操作方法汇总
最近越来越发现DOM操作是js，jquery最基本功，自己总是觉得会用起来比较吃力费时间，于是乎总结DOM基本的操作（包括js和jquery的用法），话不多说，直接切入正题。
首先，说一下自己写的整片文章的脉络，即总结js DOM基本操作的方法，然后在js，jquery在用法上进行比较举例，相信这是最让人记忆的法子。
js DOM基本操作方法
获取节点
常用获取节点的方法有：
getElementById()           功能：通过元素ID获取节点
getElementsBy]]></description><category></category></item><item><title><![CDATA[js中数组常用api汇总]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/107165669</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/107165669</guid><author>grbrb</author><pubDate>Mon, 06 Jul 2020 19:06:31 +0800</pubDate><description><![CDATA[js中数组常用api汇总
在此对js中数组常用的api进行汇总。
1.检测数组：判断value是否为数组类型
Array.isArray(value);

2.转换方法：将数组colors转化成以逗号分隔的字符串
alert(colors.toString());

3.栈、队列方法：分别实现先进先出、后进先出的效果。
var a=[1,2,3,4];
a.push(5);//[1, 2, 3, 4, 5]
a.shift();//[2, 3, 4, 5]
a.pop();//[2, 3, 4]
a.uns]]></description><category></category></item><item><title><![CDATA[详解Javascript垃圾回收机制]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/107112937</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/107112937</guid><author>grbrb</author><pubDate>Fri, 03 Jul 2020 19:18:42 +0800</pubDate><description><![CDATA[详解Javascript垃圾回收机制
为什么需要垃圾回收
由于字符串、对象和数组没有固定大小，只有当他们的大小已知时，才能对他们进行动态的存储分配。JavaScript程序每次创建字符串、数组或对象时，解释器都必须分配内存来存储那个实体。只要像这样动态地分配了内存，最终都要释放这些内存以便他们能够被再用，否则，JavaScript的解释器将会消耗完系统中所有可用的内存，造成系统崩溃。
JS自身拥有垃圾回收机制
在C/C++语言中,开发人员的一项基本工作任务就是手动追踪内存的使用情况,而js开发人员则无需关心]]></description><category></category></item><item><title><![CDATA[javascriptnew关键字]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/107112805</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/107112805</guid><author>grbrb</author><pubDate>Fri, 03 Jul 2020 19:13:08 +0800</pubDate><description><![CDATA[javascriptnew操作
要创建 Person 的新实例，必须使用 new 操作符。以这种方式调用构造函数实际上会经历以下 4
个步骤：
(1) 创建一个新对象；
(2) 将构造函数的作用域赋给新对象（因此 this 就指向了这个新对象） ；
(3) 执行构造函数中的代码（为这个新对象添加属性） ；
(4) 返回新对象。
new 操作符
在有上面的基础概念的介绍之后，在加上new操作符，我们就能完成传统面向对象的class + new的方式创建对象，在JavaScript中，我们将这类方式成为Pseu]]></description><category></category></item><item><title><![CDATA[js递归实现深拷贝]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/107091860</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/107091860</guid><author>grbrb</author><pubDate>Thu, 02 Jul 2020 19:54:09 +0800</pubDate><description><![CDATA[js递归实现深拷贝
function deepCopy(obj,newObj) {
        for(var key in obj){
            if(obj.hasOwnProperty(key)){
                var objValue = obj[key];
                if(!(objValue instanceof Object)){
                    newObj[key] = objValue;
        ]]></description><category></category></item><item><title><![CDATA[JavaScript：利用递归实现对象深拷贝]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/107091745</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/107091745</guid><author>grbrb</author><pubDate>Thu, 02 Jul 2020 19:49:19 +0800</pubDate><description><![CDATA[JavaScript：利用递归实现对象深拷贝
先来普及一下深拷贝和浅拷贝的区别
浅拷贝：就是简单的复制，用等号即可完成
let a = {a: 1}
let b = a

这就完成了一个浅拷贝
但是当修改对象b的时候，我们发现对象a的值也被改变了
b.a = 10
console.log(a.a) =&gt; 10

这是因为浅拷贝只复制了指向对象的指针，新旧对象共用同一块内存，修改某一个对象的同时也会把另一个都一并修改了
深拷贝：跟浅拷贝最简单明了的区别就是修改拷贝的对象，不会改变源对象
利用Object]]></description><category></category></item><item><title><![CDATA[JavaScript 详解预编译原理]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/107070554</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/107070554</guid><author>grbrb</author><pubDate>Wed, 01 Jul 2020 19:39:19 +0800</pubDate><description><![CDATA[JavaScript 预编译原理
今天用了大量时间复习了作用域、预编译等等知识
看了很多博文，翻开了以前看过的书（好像好多书都不会讲预编译）
发现当初觉得自己学的很明白，其实还是存在一些思维误区 （很多博文具有误导性）
今晚就整理了一下凌乱的思路
先整理一下预编译的知识吧，日后有时间再把作用域详细讲解一下
大家要明白，这个预编译和传统的编译是不一样的（可以理解js预编译为特殊的编译过程）
JavaScript是解释型语言，
既然是解释型语言，就是编译一行，执行一行
传统的编译会经历很多步骤，分词、解析、代码]]></description><category></category></item><item><title><![CDATA[javascript完整原型链详细图解（构造函数，原型，实例化对象）]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/107070443</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/107070443</guid><author>grbrb</author><pubDate>Wed, 01 Jul 2020 19:34:03 +0800</pubDate><description><![CDATA[javascript完整原型链详细图解（构造函数，原型，实例化对象）
一、首先说一下什么是构造函数：
构造函数：用来在创建对象时初始化对象。特点：构造函数名一般为大写字母开头；与new运算符一起使用来实例化对象。
举例：
function Person(){}           //Person构造函数
var p=new Person();         //Person构造函数创建对象,也可叫做实例化

二、什么是原型？
原型：构造函数在创建的过程中，系统自动创建出来与构造函数相关联的一个空的对象。]]></description><category></category></item><item><title><![CDATA[javascript递归详解]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/107070380</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/107070380</guid><author>grbrb</author><pubDate>Wed, 01 Jul 2020 19:24:19 +0800</pubDate><description><![CDATA[javascript递归详解
计算机科学的新学生通常难以理解递归程序设计的概念。递归思想之所以困难，原因在于它非常像是循环推理（circular reasoning）。它也不是一个直观的过程；当我们指挥别人做事的时候，我们极少会递归地指挥他们。
对刚开始接触计算机编程的人而言，这里有递归的一个简单定义：当函数直接或者间接调用自己时，则发生了递归。
递归的经典示例
计算阶乘是递归程序设计的一个经典示例。计算某个数的阶乘就是用那个数去乘包括 1 在内的所有比它小的数。例如，factorial(5) 等价于 54]]></description><category></category></item><item><title><![CDATA[javascript回调函数详解]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/106931097</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/106931097</guid><author>grbrb</author><pubDate>Tue, 23 Jun 2020 20:06:05 +0800</pubDate><description><![CDATA[javascript回调函数详解
在高级语言层出不穷的年代, 各个语言都号称有着一切皆为对象的自豪说法, 而 js 作为一门脚本语言却相对于java等传统面向对象语言有很大的不同之处, 除了 js 诡异的继承体系之外, 最令人着迷的一个特性就是回调函数, 当然也有很多人对他诟病, 笔者认为 回调函数 和 异步 是js语言特性的两大最为突出的店, 当然正如所有优点需要满足自我的需求, 这个世界没有银弹, 比如大量的使用回调函数将会使你的代码冗余, 错乱影响代码人的视觉与思维体验.
本文是自己对学习回调函数的的]]></description><category></category></item><item><title><![CDATA[javascript 中$符号是代表什么意思!]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/106862636</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/106862636</guid><author>grbrb</author><pubDate>Fri, 19 Jun 2020 19:35:33 +0800</pubDate><description><![CDATA[javascript 中$符号是代表什么意思!
$符号在php中是表示变量的特征字符， 在js中它也有很多作用， 一般我们用来命名一个函数名称，获取id的
1、 首先可以用来表示变量，
比如变量 var s='asdsd’或var $s=‘asdasd’;
2、 在正则表达式中，它可以匹配结尾
/sa$/.test(string)
匹配string字符串中的sa，比如string='125sa’则匹配，string='125sa21’则不匹配
正则表达式很复杂，这里只是简单的说说。
3、 由于受protot]]></description><category></category></item><item><title><![CDATA[js数据类型检测]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/106817420</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/106817420</guid><author>grbrb</author><pubDate>Wed, 17 Jun 2020 20:11:14 +0800</pubDate><description><![CDATA[js数据类型检测
typeof返回可能的值（8种）：
string、boolean、number、object、function、undefined、null、symbol
typeof是什么？
typeof是一个一元操作符，并不是函数
typeof用途
typeof null ==‘object’  // true
typeof [] ==‘object’ // true
typeof {} ==‘object’ // true
在实际开发中，typeof 只适合用来检测元素是否为undefiend和fu]]></description><category></category></item><item><title><![CDATA[js类型]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/106817357</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/106817357</guid><author>grbrb</author><pubDate>Wed, 17 Jun 2020 20:07:21 +0800</pubDate><description><![CDATA[js数据类型与隐式类型转换
执行环境
执行环境是js中最为重要的一个概念。执行环境定义了变量或函数有权访问的其他数据，决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象（variable object），环境中定义的所有变量和函数都保存在这个对象中。虽然我们写的代码无法访问这个对象，但解析器在处理数据时会在后台使用它。
全局执行环境
全局执行环境是最外围的一个执行环境。根据ECMAScript实现所在的宿主环境不同，表示执行环境的对象也不一样。在Web浏览器中，全局执行环境被认为是window对象]]></description><category></category></item><item><title><![CDATA[npm详细使用方法]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/106695261</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/106695261</guid><author>grbrb</author><pubDate>Thu, 11 Jun 2020 19:21:13 +0800</pubDate><description><![CDATA[如何将个人开发包发布到 npm 上
包：组件库 插件库 ui组件 框架…
开源内容： 可以被别人使用
包管理机制： npm cnpm yarn
环境搭建
1—node
-window + r  enter   —&gt;   输入  cmd  按 enter  ===&gt;  启动了终端
node – version
12.18.0
—&gt; 查看 node  版本号成功
2—npm
npm – version
6.14.0
------&gt;  查看 npm  版本号码
总结： 要想实现发布到 np]]></description><category></category></item><item><title><![CDATA[git使用详细方法]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/106695235</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/106695235</guid><author>grbrb</author><pubDate>Thu, 11 Jun 2020 19:20:07 +0800</pubDate><description><![CDATA[git 是版本管理工具
管路 duamagnetic
1： 本地仓库 2： 远程仓库
起步：
配置身份
git config --global usser.name ‘xxx’
git config --global user.email ‘xxxx@qq.com’
1：在某个文件中初始化创建仓库
git init
2:  将文件添加到 工作区
git add 文件名字
git add * 添加所有的文件
3： 将add 的文件 提交到本地仓库
git commit -m ‘本次提交信息’
如何查看提交日志]]></description><category></category></item><item><title><![CDATA[适配]]></title><link>https://blog.youkuaiyun.com/grbrb/article/details/106633585</link><guid>https://blog.youkuaiyun.com/grbrb/article/details/106633585</guid><author>grbrb</author><pubDate>Tue, 09 Jun 2020 08:54:47 +0800</pubDate><description><![CDATA[css s适配 iphonex
前言
iPhoneX 取消了物理按键，改成底部小黑条，这一改动导致网页出现了比较尴尬的屏幕适配问题。对于网页而言，顶部（刘海部位）的适配问题浏览器已经做了处理，所以我们只需要关注底部与小黑条的适配问题即可（即常见的吸底导航、返回顶部等各种相对底部 fixed 定位的元素）。
笔者通过查阅了一些官方文档，以及结合实际项目中的一些处理经验，整理了一套简单的适配方案分享给大家，希望对大家有所帮助，以下是处理前后效果图：
适配之前需要了解的几个新知识
安全区域
安全区域指的是一个可视]]></description><category></category></item></channel></rss>