弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】


Posted in Javascript onAugust 07, 2019

本文实例讲述了弱类型语言javascript开发中的一些坑。分享给大家供大家参考,具体如下:

测试1: (未声明变量自动提升为全局变量)

test1();
function test1() {
  function setName() {
    name = '张三'; // 此处没有var声明,提升至全局
  }
  setName();
  console.log(name);// '张三'
}

测试2: (函数内部局部变量的变量提升)

test2();
function test2() {
  var a = 1;
  function haha() {
    console.log(a);
    var a=1;
  }
  haha(); // undefined
}

测试3: (给window对象挂载属性,作用域提升至全局)

test3();
function test3() {
  var b=2;
  function hehe(){
    window.b = 3; // 此时的b为全局变量的b
    console.log(b); // 此时的b是函数test3()里的b为2
  }
  hehe();
}

测试4: (变量提升,局部作用域的综合)

test4();
function test4() {
  c = 5;
  function heihei() {
    var c;
    window.c = 3;
    console.log(c); // 函数heihei内的c为undefined
    console.log(window.c); // 3
  }
  heihei();
}

测试5: (数组的长度的问题)

test5();
function test5() {
  var arr = [];
  arr[0] = '1';
  arr[1] = 'b';
  arr[9] = 100;
  console.log(arr.length); // 10
}

测试6: (等与全等的问题)

test6();
function test6() {
  var a = 1;
  console.log(a++); // 1
  console.log(++a); // 3
  console.log(null == undefined); // true
  console.log(null === undefined);// false
  console.log(1 == "1"); // true
  console.log(1 === "1"); // false
  console.log(NaN === NaN) // false;
}

测试7: (类型相关)

test7();
function test7() {
  console.log(typeof 1); // number
  console.log(typeof "hello"); // string
  console.log(typeof typeof "hello"); // string
  console.log(typeof !!"hello"); // boolean
  console.log(typeof /[0-9]/); // object
  console.log(typeof {}); // object
  console.log(typeof null); // object
  console.log(typeof undefined); // undefined
  console.log(typeof [1, 2, 3]); // object
  console.log(toString.call([1, 2, 3])); // [object Array]
  console.log(typeof function () {}); // function
}

测试8: (parse函数相关)

test8();
function test8() {
  console.log(parseInt(3.14));// 3
  console.log(parseFloat('3.01aaa'));// 3.01
  console.log(parseInt('aa1.2'));// NaN;
  console.log(parseInt('8.00',16));// 8
  console.log(parseInt('0x8',16));// 8
  console.log(parseInt('8.00',10));// 8
  console.log(parseInt('010',8));// 10
  console.log(parseInt('1000',2));// 1000
}

测试9: (变量提升,函数提升与return后阻断执行)

test9();
function test9() {
  function bar() {
    return foo;
    foo = 10;
    function foo(){};
  }
  console.log(typeof bar()); // 'function'
}

测试10: (作用域与函数提升)

test10();
function test10() {
  var foo = 1;
  function bar() {
    foo = 10;
    console.log(typeof foo);
    return;
    function foo(){};
  }
  bar(); // number
  console.log(foo); // 1
}

测试11: (变量提升与函数提升)

test11();
function test11() {
  console.log(typeof a); // function
  var a = 3;
  function a(){};
  console.log(typeof a); // number
}

测试12: (arguments对象)

test12();
function test12() {
  function foo(a) {
    console.log(a);// 1
    arguments[0] = 2;
    console.log(a);// 2
    console.log(arguments.length);// 3
  }
  foo(1,3,4);
}

测试13: (中间函数名,直接使用会报错)

test13();
function test13() {
  var foo = function bar(name) {
    console.log("hello " + name);
  }
  foo("world");
  console.log(bar); // 此处会报错 bar is not defined
}

测试14: (在js中定时器,最后执行,涉及到的知识点是事件循环和事件队列)

test14();
function test14() {
  function foo() {
    console.log('I am foo');
  }
  console.log('正常执行');
  setTimeout((function(){
    console.log('定时器大灰狼来啦');
  }),0);
  foo();
}

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript操作DOM技巧总结》、《JavaScript页面元素操作技巧总结》、《JavaScript事件相关操作与技巧大全》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
Dec 06 Javascript
javascript 一些用法小结
Sep 11 Javascript
jQuery 页面 Mask实现代码
Jan 09 Javascript
分享XmlHttpRequest调用Webservice的一点心得
Jul 20 Javascript
Jquery选择子控件"大于号"和" "区别介绍及使用示例
Jun 25 Javascript
通过js获取div的background-image属性
Oct 15 Javascript
jquery实现弹出层登录和全屏层注册特效
Aug 28 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
Nov 06 Javascript
微信小程序 UI布局常用技巧整理总结
Dec 05 Javascript
canvas实现简易的圆环进度条效果
Feb 28 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
Aug 24 Javascript
Vue中 key keep-alive的实现原理
Sep 18 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
Aug 07 #Javascript
javascript for循环性能测试示例
Aug 07 #Javascript
弱类型语言javascript中 a,b 的运算实例小结
Aug 07 #Javascript
解决一个微信号同时支持多个环境网页授权问题
Aug 07 #Javascript
vue+element项目中过滤输入框特殊字符小结
Aug 07 #Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
Aug 07 #Javascript
javascript中的数据类型检测方法详解
Aug 07 #Javascript
You might like
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
2016/07/12 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
2017/04/11 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
js中事件对象和事件委托的介绍
2019/01/21 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
实例讲解python函数式编程
2014/06/09 Python
Python数组条件过滤filter函数使用示例
2014/07/22 Python
Python调用命令行进度条的方法
2015/05/05 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
init进程的作用
2012/04/12 面试题
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
大学生自荐书范文
2013/12/10 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
经营目标管理责任书
2014/07/25 职场文书
2014年教育工作总结
2014/11/26 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
名人传读书笔记
2015/06/26 职场文书
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
2021/06/18 MySQL
Java使用JMeter进行高并发测试
2021/11/23 Java/Android