弱类型语言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 相关文章推荐
JavaScript 计算图片加载数量的代码
Jan 01 Javascript
Jquery如何实现点击时高亮显示代码
Jan 22 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
Aug 03 Javascript
使用CamanJS在Web页面上处理图像的技巧
Aug 18 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
Jun 07 Javascript
jQuery插件扩展操作入门示例
Jan 16 Javascript
Vuex简单入门
Apr 19 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
Aug 03 Javascript
说说node中的可读流和可写流的区别
Jun 01 Javascript
浅谈Webpack打包优化技巧
Jun 12 Javascript
原生JS实现获取及修改CSS样式的方法
Sep 04 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
Jan 30 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测试程序运行时间的类
2012/02/05 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
详解js闭包
2014/09/02 Javascript
js脚本实现数据去重
2014/11/27 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
在Python中定义一个常量的方法
2018/11/10 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
Python函数生成器原理及使用详解
2020/03/12 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
美国在线工具商店:Acme Tools
2018/06/26 全球购物
日本著名的服饰鞋帽综合类购物网站:MAGASEEK
2019/01/09 全球购物
一个C/C++编程面试题
2013/11/10 面试题
设计部经理的岗位职责
2013/11/16 职场文书
财务会计专业个人求职信范本
2014/01/08 职场文书
美德好少年主要事迹
2014/01/29 职场文书
《画》教学反思
2014/04/14 职场文书
2014个人反腐倡廉思想汇报
2014/09/15 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
初中信息技术教学计划
2015/01/22 职场文书
学生退学证明
2015/06/23 职场文书
婚宴新娘致辞
2015/07/28 职场文书
Python 匹配文本并在其上一行追加文本
2022/05/11 Python