💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ### 1. js中使用typeof 能得到哪些数据类型 ~~~ 1. typeof是用来查看数据的所属类型。 2. 能够区分基本数据类型和引用数据类型, 3. 总共得到6种数据类型。其中包括4种基本数据类型(number,string,boolean,undefined)和2种引用数据类型(Object, Function) ~~~ ### 2. js内置函数有哪些 ~~~ 1. 内置函数是数据封装类对象。里面封装有属性和方法供其他类(函数)继承 2. 有11种 Number,String,Boolean,Math,Object, Function,Array,Date,Error,Ergexp(正则) ~~~ ### 3. ==和===的区别 ~~~ 1. == 1.值比较,不用考虑左右两边类型,比较时要进行类型转换(转换方式如下) 2.倘若有一边的值为boolean,那么先将boolean-->number再比较 3.倘若一边为字符串,一边为number,那么string-->number再比较 4.null==undefined 5.NaN与任何值计算,结果都为NaN 除非 NaN!=NaN-->true 6.null和undefined比较之前不能将其转为其它类型 2. === 1.安全等,左右两边的的值和类型完全相同才返回true 2.比较时不需要转换类型直接进行比较 ~~~ ### 4. js中this的指向 ~~~ javascrip的顶级作用域是window,全局变量是window的属性,函数是window的方法; this的指向: 1.在事件中,this指向正在执行事情的当前对象 2.在方法中,谁调用方法,this指向谁 this作为普通函数调用时指向window 例1: var a=10; //window.a=10; function b(){ console.log(this.a); } //window.b(); b(); console.log(window.a); 例2: <input type="text" value="hello" id="test"> <script> var value = "change" var test = document.getElementById("test"); test.onclick = function () { go(); //在事件中,this指向正在执行事情的当前对象 console.log(this.value);//hello } //因函数是window的方法,故调用它的肯定是window中的value function go() { console.log(value);//change } </script> ~~~ ### 5. 原生ajax ~~~ 1.创建ajax核心对象 2.与服务器建立连接 3.向服务器发送请求 4.服务器响应 ~~~ 示例: ~~~ <script> var url= "https://www.easy-mock.com/mock/5bad81fca1b7f6239a61664d/dataTest/pcTest"; var xhr = new XMLHttpRequest(); xhr.open("get",url); xhr.send(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ var reponse = xhr.responseText; console.log(reponse); // JSON.parse 可以将字符串转为JSON对象 var name = JSON.parse(reponse).data.name; console.log(name); } } </script> ~~~ ### 6. jquery-ajax 1.$.ajax() ~~~ window.onload = function(){ $.ajax({ type:"get", url:"xx", dataType:"json", success:function(res){ console.log(res); }, error:function(xhr){ document.body.innerHTML = xhr.status; } }) ~~~ 2.$.get() ~~~ //$.get()语法 $.get(url,function(data,status){ //获取的data是一个JS对象 }).fail(function(data){ console.log(data.status) }) //取到的数据已json的方式打开 //$.get()语法 $.get(url,function(data,status){ //获取的data是一个JS对象 },"jsonp").fail(function(data){ console.log(data.status) },"jsonp") ~~~ 3.$.post() ~~~ //$.post()语法 $.post(url,data,function(data,status){ }).fail(function(data){ console.log(data.status) }) ~~~ ### 7. axios ~~~ <script src="https://unpkg.com/axios/dist/axios.min.js"></script> ~~~ 1.get ~~~ //通过给定的ID来发送请求 axios.get(url).then(function (response) { }).catch(function (err) { console.log(err); }); ~~~ 2.post ~~~ //post axios.post(url, { firstName: 'Fred', lastName: 'Flintstone' }) .then(function (res) { console.log(res); }) .catch(function (err) { console.log(err); }); ~~~ ### 8. 原型和原型链 原型: ~~~ 原型是一个对象,原型中封装一些方法和属性可供其他对象继承。 原型对象-->Prototype (可被继承的类 和构造函数才有 对象中没有) __proto__(双下划线属性)(除了根父类object中没有 其他的都有) ~~~ 原型链: ~~~ js中每一个引用数据类型都有__proto__(双下划线属性),且指向它的原型对象Prototype,同时共享原型上的方法 所有的对象中都有一个双下划线属性 而双下划线属性指向上一级的原型对象 而上一级原型对象又指向根父类object通过一个__proto__来链接起来形成链 ~~~ ### 9. 正则 正则概念: ~~~ 规定字符串出现规则的表达式 实现获取字符串中所有相同元素 ~~~ 正则使用方法 ~~~ 1. 正则使用/正则内容/ 2. 在后面加g 表示全局搜索(在整个使用了正则表达式的字符串中进行搜索) 3. 在后面加i 表示全局搜索且 忽略大小写 ~~~ [正则的其他内容](https://www.kancloud.cn/tjs5945111/javascrip/778219) ### 10.promise [参考笔记](https://www.kancloud.cn/tjs5945111/wxxcx/823757) ### 11. js的DOM操作 [DOM操作](https://www.kancloud.cn/tjs5945111/javascrip/759035) ### 12. js数组 [参看笔记](https://www.kancloud.cn/tjs5945111/javascrip/768562) ### 13. 操作字符串的方法 ~~~ 1. length-->获取字符串的长度 2. concat-->增加的方法 3. charAt(index);-->查询指定下标的值 4. indexOf; 5. lastIndexOf(value))--> 从后开始查找. 6. slice 7. subString(startIndex,endIndex) 8. split(separator)-->将字符串按指定格式分割成数组 9. search(value)-->返回搜索值的下标 10. match(value)-->被搜索到的值返回一个数组 11. replace() -->替换 ~~~ ### 14. Ajax请求总共有八种Callback ~~~   onSuccess   onFailure   onUninitialized 初始化前   onLoading   onLoaded   onInteractive 数据交互   onComplete 完整的   onException 例外 ~~~ ### 15. 字符串与数组之间的转换 1\. 数组转字符串 ~~~ 使用join(/)函数 ~~~ 2\. 字符串转数组 ~~~ 1.split() var a ="adskflhsdkfh/asdjfh" console.log(a.split("/")) ~~~ 3\. 将对象转为数组 ~~~ var arr =[ {name:"zhang"}, {name:"zhan"}, {name:"zha"}, ] 1. 方法1 var ar =[]; arr.forEach(ele=>{ ar.push(ele.name) }) var newarr=ar.join("/"); console.log(newarr); ~~~ ### 16.**判断一个对象是否为数组:** > 问题来源于,typeof {}和typeof \[\]的结果都是object; > 怎么通过typeof去判断一个对象是不是数组类型呢?对象是对象,数组也是对象,**js中万物皆对象** * **1、从原型入手,Array.prototype.isPrototypeOf(obj);** 利用isPrototypeOf()方法,判定Array是不是在obj的原型链中,如果是,则返回true,否则false。 * **2、从构造函数入手,obj instanceof Array** instanceof只会返回一个布尔值 ~~~ [] instanceof Array ==> true ~~~ * **3、根据对象的class属性(类属性),跨原型链调用toString()方法。**  Object.prototype.toString.call(obj); ~~~ Object.prototype.toString.call([]); ==> "[object Array]" ~~~ * **4、Array.isArray()方法。** ~~~ rray.isArray([1, 2, 3]); // true Array.isArray({foo: 123}); // false ~~~ ### 17. 谈谈你对sass理解 ~~~ 1. sass是css预处理器 2. sass是基于ruby开发的 3. 能够使用嵌套语法使用变量和代码块 减少重复代码并能实现代码复用 ~~~ ### 18. call、apply、bind的区别 ~~~ call、apply、bind用来改变this指向。 bind调用后不会直接执行,会改变函数的执行顺序 call和apply是直接执行 ~~~ ### 19.call 和 apply 1. call\-->改变函数内部this,关键字的指向call(thisObj,params) ~~~ var cheng={ name:"cheng" } var jiang = { name:"jiang", sayName(a,b){ console.log(this.name); console.log(a+b); } } jiang.sayName.call(cheng,1,2); ~~~ 2. apply-->改变函数内部this关键字的指向 apply(thisObj,\[params\]) ~~~ var cheng={ name:"cheng" } var jiang = { name:"jiang", sayName(a,b){ console.log(this.name); console.log(a+b); } } jiang.sayName.apply(cheng,[1,2]) ~~~ 3. call\-->改变函数内部this,关键字的指向call(thisObj,params) ### 20. 使用`解构语法`实现 引用数据类型 的赋值 ~~~ //对象 var a={ name:'tong', age:18 } var b={...a} b.name='li' console.log(a.name) ; //tong //数组 var a = [1, 2, 3, 4, 5] var b = [...a] b[0] = 66 console.log(a); //[1, 2, 3, 4, 5] ~~~ ### 21. 深浅拷贝 ~~~ 1. 浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间, 2. 深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。 ~~~ ### 22.js 判断是自有属性 还是共有属性 ~~~   1、判断自有属性      var boolean = obj.hasOwnProperty("属性名");//返回布尔值   2、判断共有属性     var bool = ! obj.hasOwnProperty("属性名") && obj.属性名!==undefined; ~~~