JS常考点(1)

1. 数 据 类 型 \color{red}{1.数据类型} 1.

基本数据类型 数 字 、 布 尔 值 、 字 符 串 、 u n d e f i n e d 、 n u l l 、 S y m b o l \color{#0099ff}{数字、布尔值、字符串、undefined、null、 Symbol} undefinednullSymbol
Symbol这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。
引用类型 o b j e c t 、 f u n c t i o n 、 A r r a y 、 D a t e 、 R e g E x p \color{#0099ff}{object、function、 Array、Date、RegExp} objectfunctionArrayDateRegExp

2. l e t , c o n s t , v a r 区 别 \color{red}{2.let,const,var区别 } 2.letconstvar

ES5 中作用域有: 全 局 作 用 域 、 函 数 作 用 域 。 \color{0099ff}{全局作用域、函数作用域。} 没有块作用域的概念。ES6 中新增了 块 级 作 用 域 \color{0099ff}{块级作用域} 。块作用域由 { } 包括,if语句和 for语句里面的{ }也属于块作用域。
三者都是用来声明变量的

  • var定义的变量,没有块的概念,可以 跨 块 访 问 \color{0099ff}{跨块访问} 访, 不能跨函数访问。
  • let定义的变量,只能在块作用域里访问, 不 能 跨 块 \color{0099ff}{不能跨块} 访问,也不能跨函数访问。
  • const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且 不 能 修 改 \color{0099ff}{不能修改}

3. g e t 和 p o s t 请 求 区 别 \color{red}{3.get和post请求区别 } 3.getpost

1. url可见性:

get,参数url可见;
post,url参数不可见

2. 数据传输上:

get,通过拼接url进行传递参数;
post,通过body体传输参数

3. 缓存性:

get请求是可以缓存的
post请求不可以缓存

4. 后退页面的反应

get请求页面后退时,不产生影响
post请求页面后退时,会重新提交请求

5. 传输数据的大小

get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)
post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。

6. 安全性
原则上post肯定要比get安全

4. t h i s 的 指 向 \color{red}{4.this的指向 } 4.this

  • 如果是一般函数,this指向全局对象window;
  • 在严格模式下"use strict",为undefined.
  • 对象的方法里调用,this指向调用该方法的对象.
  • 构造函数里的this,指向创建出来的实例.

5. 普 通 函 数 和 箭 头 函 数 区 别 \color{red}{5.普通函数和箭头函数区别} 5.

(1) 箭头函数是匿名函数,不能作为构造函数,不能使用new
(2) 箭头函数不绑定arguments,取而代之用rest参数…解决
(3) this的作用域不同,箭头函数不绑定this,会捕获其所在的上下文的this值,作为自己的this值。
(4)箭头函数没有原型属性
(5)箭头函数不能当做Generator函数,不能使用yield关键字

6. 同 源 策 略 是 啥 ? 怎 么 跨 域 ? j a s o n p 是 怎 么 实 现 跨 域 的 ? 他 返 回 的 是 一 个 什 么 东 西 \color{red}{6.同源策略是啥 ? 怎么跨域?jasonp是怎么实现跨域的?他返回的是一个什么东西} 6.??jasonp?西

同源策略

  1. 同协议

  2. 同域名/同IP

  3. 同端口号

       【注】ajax只能下载同源的数据,跨源的数据禁止下载
    

跨源的策略

  1. 修改ajax同源协议(不建议)头文件加上Access-Control-Allow-Origin
  2. 委托php文件进行跨源 php文件没有跨源限制
  3. jsonp

JSONP跨域的使用流程

  1. 先去声明一个函数,这个函数有一个形参,这个形参会拿到我们想要下载的数据,使用这个参数进行后续数据的处理
  2. 在需要下载数据的时候,动态创建script标签,将标签src属性设置成下载数据的链接
  3. 在script插入到页面的时候,就会调用已经封装好的函数,将我们需要的数据传过来

7. t y p e o f 和 i n s t a n c e o f \color{red}{7.typeof和instanceof} 7.typeofinstanceof

  1. typeof 是判断参数是什么类型的实例,返回值为说明运算数类型的字符串。
  2. instanceof是用来判断一个对象在其原型链中是否存在一个构造函数的prototype属性

a instanceof b:判断a是否为b的实例,可以用于继承关系中
b是c的父对象,a是c的实例,a instanceof b 与 a instanceof c 结果均为true

8. t y p e o f ( n u l l ) 输 出 什 么 \color{red}{8.typeof(null)输出什么} 8.typeofnull

object

9. c o n s t 一 个 数 组 , 是 否 能 够 p u s h 一 个 数 据 进 去 , 为 什 么 能 或 不 能 ? \color{red}{9.const一个数组,是否能够push一个数据进去,为什么能或不能?} 9.constpush?

splice、push可以修改const值,能够push数据进去
const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。

10. p r o m i s e 一 般 用 来 做 什 么 \color{red}{10.promise一般用来做什么} 10.promise

Promise 是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。
promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。
promise是用来解决两个问题的:
回调地狱,代码难以维护, 常常第一个的函数的输出是第二个函数的输入这种现象
• promise可以支持多个并发的请求,获取并发请求中的数据
• 这个promise可以解决异步的问题,本身不能说promise是异步的

11. 闭 包 \color{red}{11.闭包} 11.

 1.函数嵌套函数
 2.内部函数使用外部函数的形参和变量
 3.被引用的形参和变量就不会被垃圾回收机制回收

好处:

  1. 希望一个变量常驻内存
  2. 避免全局变量污染 避免声明全局变量
  3. 可用声明私有成员

12. 判 断 是 否 为 数 字 ? \color{red}{12.判断是否为数字?} 12.

function isNum(num) {
        return typeof num === "number" && !isNaN(num);
      }
      alert(isNum(" "));
function isNum(num) {
        if (parseFloat(num).toString() == "NaN") {
          return false;
        } else {
          return true;
        }
      }
      alert(isNum(" "));
      //isNaN(val)不能判断空串或一个空格
      //如果是一个空串、空格或null,而isNaN是做为数字0进行处理的,而parseInt与parseFloat是返回一个错误消息,这个isNaN检查不严密而导致的。

13. 数 组 去 重 \color{red}{13.数组去重} 13.

1. 引入库underscore-min.js
2. For嵌套循环for,然后用splice去重

 var arr = [1, 3, 4, 5, 3, 2, 1, 1];
      for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
          if (arr[i] == arr[j]) {
            arr.splice(j, 1);
            j--;
          }
        }
      }
      alert(arr);

3.利用sort+push

var arr = [1, 3, 4, 5, 3, 2, 1, 1, 6, 8, 3, 4, 9];
      var arr = arr.sort();
      var result = [];
      for (var i = 0; i < arr.length; i++) {
        if (arr[i] !== arr[i + 1]) {
          result.push(arr[i]);
        }
      }
      alert(result);

4.利用indexOf去重

var arr = [1, 3, 4, 5, 3, 2, 1, 1, 6, 8, 3, 4, 9];
      var result = [];
      for (var i = 0; i < arr.length; i++) {
        if (result.indexOf(arr[i]) === -1) {
          result.push(arr[i]);
        }
      }
      alert(result);

5.filter+indexOf

var arr = [1, 3, 4, 5, 3, 2, 1, 1, 6, 8, 3, 4, 9];
      function getUniqueArray() {
        var result = arr.filter(function (item, index) {
          return arr.indexOf(item) === index;
        });
        alert(result);
      }
      getUniqueArray();

6.利用ES6 set去重

 var arr = [1, 3, 4, 5, 3, 2, 1, 1, 6, 8, 3, 4, 9];
      function getUniqueArray(arr) {
        return Array.from(new Set(arr));
      }
      alert(getUniqueArray(arr));

7.set

var arr = [1, 3, 4, 5, 3, 2, 1, 1, 6, 8, 3, 4, 9];
      function getUniqueArray() {
        var result = [...new Set(arr)];
        alert(result);
      }
      getUniqueArray();

8.reduce+include

var arr = [1, 3, 4, 5, 3, 2, 1, 1, 6, 8, 3, 4, 9];
      function getUniqueArray() {
        var result = arr.reduce((pre, item) => {
          return pre.includes(item) ? pre : [...pre, item];
        }, []);
        alert(result);
      }
      getUniqueArray();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值