js 面试的坑(四)

r囧r小猫 2022-07-16 10:26 169阅读 0赞

函数提升比变量提升优先级高

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

input 4位加一个空格

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>
  6. 数字每4位加空格
  7. </title>
  8. <script type="text/javascript">
  9. window.onload = function() {
  10. var t = document.getElementById("test");
  11. // t.onkeydown = change;
  12. t.oninput = change;
  13. //t.onkeypress = change;
  14. }
  15. function change() {
  16. this.value = this.value.replace(/\D/g, '').replace(/....(?!$)/g, '$& '); //替换空格前4位数字为4位数字加空格
  17. }
  18. </script>
  19. </head>
  20. <body>
  21. <input type="text" id="test" />
  22. </body>
  23. </html>

JS中判断null、undefined与NaN的方法

  1. 写了个 str ="s"++;
  2. 然后出现Nan,找了一会。
  3. 收集资料如下判断:
  4. 1.判断undefined:
  5. 复制代码 代码如下:
  6. <span style="font-size: small;">var tmp = undefined;
  7. if (typeof(tmp) == "undefined"){
  8. alert("undefined");
  9. }</span>
  10. 说明:typeof 返回的是字符串,有六种可能:"number""string""boolean""object""function""undefined"
  11. 2.判断null:
  12. 复制代码 代码如下:
  13. <span style="font-size: small;">var tmp = null;
  14. if (!tmp && typeof(tmp)!="undefined" && tmp!=0){
  15. alert("null");
  16. } </span>
  17. 3.判断NaN:
  18. 复制代码 代码如下:
  19. <span style="font-size: small;">var tmp = 0/0;
  20. if(isNaN(tmp)){
  21. alert("NaN");
  22. }</span>
  23. 说明:如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == === 运算符。
  24. 提示:isNaN() 函数通常用于检测 parseFloat() parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。
  25. 4.判断undefinednull:
  26. 复制代码 代码如下:
  27. <span style="font-size: small;">var tmp = undefined;
  28. if (tmp== undefined)
  29. {
  30. alert("null or undefined");
  31. } </span>
  32. 复制代码 代码如下:
  33. <span style="font-size: small;">var tmp = undefined;
  34. if (tmp== null)
  35. {
  36. alert("null or undefined");
  37. }</span>
  38. 说明:null==undefined
  39. <!--EndFragment-->
  40. 5.判断undefinednullNaN:
  41. 复制代码 代码如下:
  42. <span style="font-size: small;">var tmp = null;
  43. if (!tmp) //if ((!tmp)&&(tmp!=0))
  44. {
  45. alert("null or undefined or NaN");
  46. }</span>
  47. 提示:一般不那么区分就使用这个足够。

看看

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

看看

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script type="text/javascript" src="app/js/jquery-2.1.4.js"></script>
  7. <script type="text/javascript">
  8. $(function() {
  9. var a=11;
  10. function aaa(a) {
  11. console.log(a);
  12. a=10;
  13. }
  14. function bbb(a) {
  15. console.log(a);
  16. a=100;
  17. }
  18. function ccc(a) {
  19. console.log(a);
  20. a=1000;
  21. }
  22. //
  23. var arry = [];
  24. arry.push(aaa);
  25. arry.push(bbb);
  26. arry.push(ccc);
  27. for(var i = 0; i < arry.length; i++) {
  28. arry[i](a);
  29. }
  30. //var sb = $.Callbacks().add(aaa).add(bbb).add(ccc).fire();
  31. var sb = $.Callbacks().add(aaa, bbb ,ccc).fire(a);
  32. })
  33. </script>
  34. </head>
  35. <body>
  36. </body>
  37. </html>

这里写图片描述

$.Callbacks()实现原理

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script type="text/javascript" src="app/js/jquery-2.1.4.js"></script>
  7. <script type="text/javascript">
  8. $(function() {
  9. function aaa() {
  10. alert(1);
  11. }
  12. function bbb() {
  13. alert(2);
  14. }
  15. function ccc() {
  16. alert(3);
  17. }
  18. var arry = [];
  19. arry.push(aaa);
  20. arry.push(bbb);
  21. arry.push(ccc);
  22. for(var i = 0; i < arry.length; i++) {
  23. arry[i]();
  24. }
  25. //var sb = $.Callbacks().add(aaa).add(bbb).add(ccc).fire();
  26. var sb = $.Callbacks().add(aaa, bbb ,ccc).fire();
  27. })
  28. </script>
  29. </head>
  30. <body>
  31. </body>
  32. </html>

再原基础上加

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script type="text/javascript" src="app/js/jquery-2.1.4.js"></script>
  7. <script type="text/javascript">
  8. $(function() {
  9. console.log($.now());
  10. $("#id").click(function() {
  11. $(this).css('width', "+=100px"); //在原基础上加
  12. })
  13. })
  14. </script>
  15. </head>
  16. <body>
  17. <div id="id" style="width: 100px;height: 100px;background: red;">
  18. </div>
  19. </body>
  20. </html>

默认变量

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script type="text/javascript">
  7. var plugin = (function() {
  8. var sayhi = function(str = '你好啊!') {
  9. console.log(str);
  10. }
  11. var sayhello = function() {
  12. console.log("这个API能做很牛逼的事情");
  13. }
  14. return {
  15. sayhi: sayhi,
  16. sayhello: sayhello
  17. }
  18. })();
  19. //通过插件提供的API使用插件
  20. plugin.sayhi();
  21. plugin.sayhi('javascript');
  22. plugin.sayhello();
  23. </script>
  24. </head>
  25. <body>
  26. </body>
  27. </html>

这里写图片描述

5星级

参考链接:http://www.cnblogs.com/libin-1/p/5962269.html

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  6. <title>Document</title>
  7. <script type="text/javascript" src="js/jquery-1.12.4.js"></script>
  8. <style type="text/css">
  9. .red {
  10. width: 100px;
  11. height: 100px;
  12. background: red;
  13. }
  14. .green {
  15. width: 100px;
  16. height: 100px;
  17. background: green;
  18. }
  19. </style>
  20. <script type="text/javascript">
  21. $(function() {
  22. //闭包的常规用法
  23. var i = 0;
  24. function main() {
  25. return function() {
  26. console.log("我是:" + i++);
  27. }
  28. }
  29. var sbs = main();
  30. sbs();
  31. sbs();
  32. sbs();
  33. sbs();
  34. });
  35. $(function() {
  36. $(".red").click((function(a, b, c) {
  37. return function() {
  38. console.log(a++, b++, c++);
  39. }
  40. })(1, 2, 3));
  41. });
  42. //上面的原理
  43. $(function() {
  44. var haha = (function(a, b, c) {
  45. return function() {
  46. console.log(a++, b++, c++);
  47. }
  48. })(100, 200, 300)
  49. $(".green").click(haha);
  50. })
  51. </script>
  52. </head>
  53. <body>
  54. <div class="red"></div>
  55. <div class="green"></div>
  56. </body>
  57. </html>
  58. <!doctype html>
  59. <html lang="en">
  60. <head>
  61. <meta charset="UTF-8" />
  62. <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  63. <title>Document</title>
  64. <script type="text/javascript" src="js/jquery-1.12.4.js"></script>
  65. <style type="text/css">
  66. .red {
  67. width: 100px;
  68. height: 100px;
  69. background: red;
  70. }
  71. .green {
  72. width: 100px;
  73. height: 100px;
  74. background: green;
  75. }
  76. </style>
  77. <script type="text/javascript">
  78. $(function() {
  79. //闭包的常规用法
  80. var i = 0;
  81. function main() {
  82. return function() {
  83. console.log("我是:" + i++);
  84. }
  85. }
  86. var sbs = main();
  87. sbs();
  88. sbs();
  89. sbs();
  90. sbs();
  91. });
  92. $(function() {
  93. var sb = (function(i, j) {
  94. return i + j;
  95. })(2, 3);
  96. console.log("sb:" + sb);
  97. })
  98. $(function() {
  99. $(".red").click((function(a, b, c) {
  100. return function() {
  101. console.log(a++, b++, c++);
  102. }
  103. })(1, 2, 3));
  104. });
  105. //上面的原理
  106. $(function() {
  107. var haha = (function(a, b, c) {
  108. return function() {
  109. console.log(a++, b++, c++);
  110. }
  111. })(100, 200, 300)
  112. $(".green").click(haha);
  113. });
  114. //上面的为啥会闭包:一般匿名自执行函数里面return函数就是闭包
  115. //回调函数就是匿名自执行,里面return 就是闭包
  116. $(function() {
  117. var main = function() {
  118. console.log('sb');
  119. }
  120. var set = setInterval(main, 1000)
  121. })
  122. </script>
  123. </head>
  124. <body>
  125. <div class="red"></div>
  126. <div class="green"></div>
  127. </body>
  128. </html>

红色的点三下,绿色的点三下,重复两次:

这里写图片描述

学习和工作的过程中总结的干货,包括常用函数、常用js技巧、常用正则表达式、git笔记等。为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路。 PS:此文档,我会持续更新。
Ajax请求
jquery ajax函数
我自己封装了一个ajax的函数,代码如下:

  1. var Ajax = function(url, type success, error) {
  2. $.ajax({
  3. url: url,
  4. type: type,
  5. dataType: 'json',
  6. timeout: 10000,
  7. success: function(d) {
  8. var data = d.data;
  9. success && success(data);
  10. },
  11. error: function(e) {
  12. error && error(e);
  13. }
  14. });
  15. };

// 使用方法:

  1. Ajax('/data.json', 'get', function(data) {
  2. console.log(data);
  3. });

jsonp方式
有时候我们为了跨域,要使用jsonp的方法,我也封装了一个函数:

  1. function jsonp(config) {
  2. var options = config || {}; // 需要配置url, success, time, fail四个属性
  3. var callbackName = ('jsonp_' + Math.random()).replace(".", "");
  4. var oHead = document.getElementsByTagName('head')[0];
  5. var oScript = document.createElement('script');
  6. oHead.appendChild(oScript);
  7. window[callbackName] = function(json) {
  8. //创建jsonp回调函数
  9. oHead.removeChild(oScript);
  10. clearTimeout(oScript.timer);
  11. window[callbackName] = null;
  12. options.success && options.success(json); //先删除script标签,实际上执行的是success函数
  13. };
  14. oScript.src = options.url + '?' + callbackName; //发送请求
  15. if (options.time) { //设置超时处理
  16. oScript.timer = setTimeout(function () {
  17. window[callbackName] = null;
  18. oHead.removeChild(oScript);
  19. options.fail && options.fail({ message: "超时" });
  20. }, options.time);
  21. }
  22. };
  23. // 使用方法:
  24. jsonp({
  25. url: '/b.com/b.json',
  26. success: function(d){
  27. //数据处理
  28. },
  29. time: 5000,
  30. fail: function(){
  31. //错误处理
  32. }
  33. });

常用正则验证表达式
手机号验证

  1. var validate = function(num) {
  2. var exp = /^1[3-9]\d{9}$/;
  3. return exp.test(num);
  4. };

身份证号验证

  1. var exp = /^[1-9]{
  2. 1}[0-9]{
  3. 14}$|^[1-9]{
  4. 1}[0-9]{
  5. 16}([0-9]|[xX])$/;

ip验证

  1. var exp = /^(\d{
  2. 1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{
  3. 1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{
  4. 1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{
  5. 1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
  6. 常用js函数
  7. //返回顶部
  8. $(window).scroll(function() {
  9. var a = $(window).scrollTop();
  10. if(a > 100) {
  11. $('.go-top').fadeIn();
  12. }else {
  13. $('.go-top').fadeOut();
  14. }
  15. });
  16. $(".go-top").click(function(){
  17. $("html,body").animate({scrollTop:"0px"},'600');
  18. });
  19. //阻止冒泡
  20. function stopBubble(e){
  21. e = e || window.event;
  22. if(e.stopPropagation){
  23. e.stopPropagation(); //W3C阻止冒泡方法
  24. }else {
  25. e.cancelBubble = true; //IE阻止冒泡方法
  26. }
  27. }
  28. //全部替换replaceAll
  29. var replaceAll = function(bigStr, str1, str2) {
  30. //把bigStr中的所有str1替换为str2
  31. var reg = new RegExp(str1, 'gm');
  32. return bigStr.replace(reg, str2);
  33. }
  34. //获取浏览器url中的参数值
  35. var getURLParam = function(name) {
  36. return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)', "ig").exec(location.search) || [, ""])[1].replace(/\+/g, '%20')) || null;
  37. };
  38. //深度拷贝对象
  39. function cloneObj(obj) {
  40. var o = obj.constructor == Object ? new obj.constructor() : new obj.constructor(obj.valueOf());
  41. for(var key in obj){
  42. if(o[key] != obj[key] ){
  43. if(typeof(obj[key]) == 'object' ){
  44. o[key] = mods.cloneObj(obj[key]);
  45. }else{
  46. o[key] = obj[key];
  47. }
  48. }
  49. }
  50. return o;
  51. }
  52. //数组去重
  53. var unique = function(arr) {
  54. var result = [], json = {};
  55. for (var i = 0, len = arr.length; i < len; i++){
  56. if (!json[arr[i]]) {
  57. json[arr[i]] = 1;
  58. result.push(arr[i]); //返回没被删除的元素
  59. }
  60. }
  61. return result;
  62. };
  63. //判断数组元素是否重复
  64. var isRepeat = function(arr) {
  65. //arr是否有重复元素
  66. var hash = {};
  67. for (var i in arr) {
  68. if (hash[arr[i]]) return true;
  69. hash[arr[i]] = true;
  70. }
  71. return false;
  72. };
  73. //生成随机数
  74. function randombetween(min, max){
  75. return min + (Math.random() * (max-min +1));
  76. }
  77. //操作cookie
  78. own.setCookie = function(cname, cvalue, exdays){
  79. var d = new Date();
  80. d.setTime(d.getTime() + (exdays*24*60*60*1000));
  81. var expires = 'expires='+d.toUTCString();
  82. document.cookie = cname + '=' + cvalue + '; ' + expires;
  83. };
  84. own.getCookie = function(cname) {
  85. var name = cname + '=';
  86. var ca = document.cookie.split(';');
  87. for(var i=0; i< ca.length; i++) {
  88. var c = ca[i];
  89. while (c.charAt(0) == ' ') c = c.substring(1);
  90. if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
  91. }
  92. return '';
  93. };

知识技巧总结

  1. 数据类型
  2. underfinednull0falseNaN、空字符串。他们的逻辑非结果均为true
  3. 闭包格式
  4. 好处:避免命名冲突(全局变量污染)。
  5. (function(a, b) {
  6. console.log(a+b); //30
  7. })(10, 20);
  8. 截取和清空数组
  9. var arr = [12, 222, 44, 88];
  10. arr.length = 2; //截取,arr = [12, 222];
  11. arr.length = 0; //清空,arr will be equal to [].
  12. 获取数组的最大最小值
  13. var numbers = [5, 45822, 120, -215];
  14. var maxInNumbers = Math.max.apply(Math, numbers); //45822
  15. var minInNumbers = Math.min.apply(Math, numbers); //-215
  16. 浮点数计算问题
  17. 0.1 + 0.2 == 0.3 //false
  18. 为什么呢?因为0.1+0.2等于0.30000000000000004JavaScript的数字都遵循IEEE 754标准构建,在内部都是64位浮点小数表示。可以通过使用toFixed()来解决这个问题。
  19. 数组排序sort函数
  20. var arr = [1, 5, 6, 3]; //数字数组
  21. arr.sort(function(a, b) {
  22. return a - b; //从小到大排
  23. return b - a; //从大到小排
  24. return Math.random() - 0.5; //数组洗牌
  25. });
  26. var arr = [{ //对象数组
  27. num: 1,
  28. text: 'num1'
  29. }, {
  30. num: 5,
  31. text: 'num2'
  32. }, {
  33. num: 6,
  34. text: 'num3'
  35. }, {
  36. num: 3,
  37. text: 'num4'
  38. }];
  39. arr.sort(function(a, b) {
  40. return a.num - b.num; //从小到大排
  41. return b.num - a.num; //从大到小排
  42. });
  43. 对象和字符串的转换
  44. var obj = {a: 'aaa', b: 'bbb'};
  45. var objStr = JSON.stringify(obj); // "{"a":"aaa","b":"bbb"}"
  46. var newObj = JSON.parse(objStr); // {a: "aaa", b: "bbb"}

git笔记
git使用之前的配置

  1. 1.git config --global user.email xxx@163.com
  2. 2.git config --global user.name xxx
  3. 3.ssh-keygen -t rsa -C xxx@163.com(邮箱地址) // 生成ssh
  4. 4.找到.ssh文件夹打开,使用cat id_rsa.pub //打开公钥ssh串
  5. 5.登陆githubsettings SSH keys add ssh keys (把上面的内容全部添加进去即可)
  6. 说明:然后这个邮箱(xxxxx@gmail.com)对应的账号在github上就有权限对仓库进行操作了。可以尽情的进行下面的git命令了。
  7. git常用命令
  8. 1git config user.name / user.email //查看当前git的用户名称、邮箱
  9. 2git clone https://github.com/jarson7426/javascript.git project //clone仓库到本地。
  10. 3、修改本地代码,提交到分支: git add file / git commit -m “新增文件”
  11. 4、把本地库推送到远程库: git push origin master
  12. 5、查看提交日志:git log -5
  13. 6、返回某一个版本:git reset --hard 123
  14. 7、分支:git branch / git checkout name / git checkout -b dev
  15. 8、合并name分支到当前分支:git merge name / git pull origin
  16. 9、删除本地分支:git branch -D name
  17. 10、删除远程分支: git push origin :daily/x.x.x
  18. 11git checkout -b mydev origin/daily/1.0.0 //把远程daily分支映射到本地mydev分支进行开发
  19. 12、合并远程分支到当前分支 git pull origin daily/1.1.1
  20. 13、发布到线上:
  21. git tag publish/0.1.5
  22. git push origin publish/0.1.5:publish/0.1.5
  23. 14、线上代码覆盖到本地:
  24. git checkout --theirs build/scripts/ddos
  25. git checkout --theirs src/app/ddos

发表评论

表情:
评论列表 (有 0 条评论,169人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js

    判断一个变量var是否是数组,你需要使用Array.isArray(var),不能用typeof,否则弹出object 数组排序:\[1,2,5,10\].sort((a, b