弱类型语言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 16 Javascript
jQuery控制TR显示隐藏的三种常用方法
Aug 21 Javascript
AngularJS入门教程之学习环境搭建
Dec 06 Javascript
js实现简易的单数字随机抽奖(0-9)
Mar 19 Javascript
基于JQuery实现图片轮播效果(焦点图)
Feb 02 Javascript
BootStrap3学习笔记(一)之网格系统
May 20 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
Mar 09 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
Feb 03 Javascript
React diff算法的实现示例
Apr 20 Javascript
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 jQuery
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
Apr 25 Javascript
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 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
php读取javascript设置的cookies的代码
2010/04/12 PHP
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
关于PHP通用返回值设置方法
2017/03/31 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
2019/05/09 PHP
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
angular十大常见问题
2017/03/07 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
微信小程序实现类似微信点击语音播放效果
2020/03/30 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
python使用代理ip访问网站的实例
2018/05/07 Python
django中forms组件的使用与注意
2019/07/08 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
西安夏日科技有限公司Java笔试题
2013/01/11 面试题
自荐信的五个重要部分
2013/10/29 职场文书
通信工程毕业生求职信
2013/11/16 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
村庄环境整治方案
2014/05/15 职场文书
故意伤害辩护词
2015/05/21 职场文书
入党转正介绍人意见
2015/06/03 职场文书
详解Python为什么不用设计模式
2021/06/24 Python
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android