弱类型语言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 相关文章推荐
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
Feb 03 Javascript
Jquery实现的tab效果可以指定默认显示第几页
Oct 16 Javascript
instanceof和typeof运算符的区别详解
Jan 06 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
Jun 13 Javascript
一个JavaScript函数把URL参数解析成Json对象
Sep 24 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
Aug 18 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
Dec 20 Javascript
基于Vue2x的图片预览插件的示例代码
May 14 Javascript
为什么要使用Vuex的介绍
Jan 19 Javascript
JavaScript实现的九种排序算法
Mar 04 Javascript
javascript导出csv文件(excel)的方法示例
Aug 25 Javascript
vue-cli4.0多环境配置变量与模式详解
Dec 30 Vue.js
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
第八节--访问方式
2006/11/16 PHP
PHP写MySQL数据 实现代码
2009/06/15 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
PHP Class SoapClient not found解决方法
2018/01/20 PHP
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
Jquery Easyui表单组件Form使用详解(30)
2016/12/19 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
2016/12/26 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
ajax+node+request爬取网络图片的实例(宅男福利)
2017/08/28 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
Vue 实例中使用$refs的注意事项
2021/01/29 Vue.js
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
pycharm远程调试openstack代码
2017/11/21 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
Python字节单位转换(将字节转换为K M G T)
2021/03/02 Python
时尚圣经:The Fashion Bible
2019/03/03 全球购物
意大利体育用品和运动服网上商店:Maxi Sport
2019/09/14 全球购物
自主招生自荐信范文
2013/12/04 职场文书
产品委托授权书范本
2014/09/16 职场文书
党支部工作总结2015
2015/04/01 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
导游词之五台山
2019/10/11 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL
HTTP中的Content-type详解
2022/01/18 HTML / CSS