弱类型语言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 相关文章推荐
DEFER怎么用?
Jul 01 Javascript
用js重建星际争霸
Dec 22 Javascript
node.js中的events.emitter.removeListener方法使用说明
Dec 10 Javascript
全面了解JS中的匿名函数
Jun 29 Javascript
微信小程序加载更多 点击查看更多
Nov 29 Javascript
Bootstarp 基础教程之表单部分实例代码
Feb 03 Javascript
js自定义瀑布流布局插件
May 16 Javascript
react-router中的属性详解
Jun 01 Javascript
如何制作一个Node命令行图像识别工具
Dec 12 Javascript
微信小程序实现同一页面取值的方法分析
Apr 30 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
Jun 21 Javascript
小程序如何获取多个formId实现详解
Sep 20 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生成EXCEL的东东
2006/10/09 PHP
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
Javascript 对象的解释
2008/11/24 Javascript
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
2017/11/01 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
vue将data恢复到初始状态 && 重新渲染组件实例
2020/09/04 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
Python中的条件判断语句基础学习教程
2016/02/07 Python
Django使用Celery异步任务队列的使用
2018/03/13 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
python实现决策树分类(2)
2018/08/30 Python
Python判断telnet通不通的实例
2019/01/26 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
Python类继承和多态原理解析
2020/02/05 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
python数据类型强制转换实例详解
2020/06/22 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
活动总结的格式
2014/05/07 职场文书
计算机科学技术自荐信
2014/06/12 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL