1.分号与换行

  1. function fn1(){
  2. return {
  3. name: 'javascript'
  4. };
  5. }
  6.  
  7. function fn2(){
  8. return
  9. {
  10. name: 'javascript'
  11. };
  12. }
  13.  
  14. var obj1 = fn1();
  15. var obj2 = fn2();
  16.  
  17. console.log(obj1);
  18. console.log(obj2);

  这个例子看上去没有什么不同,但是实质上,确实是不同的。第一个输出结果为一个object ,而第二个输出结果为undefined。为什么?

因为Js中是不需要分号这个东西的,第二个会被解析成:

  1. function fn2(){
  2. return ;
  3. {
  4. name: 'javascript'
  5. };
  6. }

  所以实质上返回的是一个undefined。

2.五大类型中,关于null

Js有五大数据类型boolean,string,number,undefined,object。而为什么

  1. typeof null

会被解析为 object 呢?

原因是在计算机底层存储数据时是以二进制格式进行存储的,如果前三位为0的话会被解析为object数据类型。而null的所有位数都为0,当解析null时,前三位先被解析,计算机错认为null为object类型,这属于计算机语言层面的一个bug。

3.关于undefined

undefined是Undefined数据类型的实例,虽然它在实际应用过程中并不能用来存储数据,但我们可以对他进行一些操作。

当我们 对Undefined数据类型名进行类型检测时

  1. var Undefined = 10;
  2. var String=10;
  3. console.log(typeof Undefined);
  4. console.log(typeof String);

显示结果为 :number number。这是因为Undefined并不是关键字和保留字。如果对关键字进行声明,会报错。

当我们对他进行数据类型检测时

  1. console.log(typeof undefined)

显示结果为undefined。

当我们对其他数据类型进行类型检测时

  1. console.log(typeof Object);
  2. console.log(typeof Number);
  3. console.log(typeof String);
  4. console.log(typeof Boolean);

显示结果却不是数据类型本身的类型,而是function;

但是由于undefined并不是关键字和保留字,所以我们可以重新声明它

  1. var undefined = 10;
  2. var string=10;
  3. console.log(typeof undefined);
  4. console.log(typeof string);

显示结果为:number  number;可见undefined具有不变值的属性。同时开头字母小写的

  1.    var undefined = 10;
  2. var string=10;
  3. var boolean=10;
  4. var object=10;
  5. var number=10;
  6.  
  7. console.log(typeof undefined);
  8. console.log(typeof string);
  9. console.log(typeof object);
  10.  
  11. console.log(typeof boolean);
  12. console.log(typeof number);

显示结果为:undefined number number number number 。可见同名且首字母小写的数据类型实例只有undefined一个,其他的都不是。

4.在JavaScript中不存在重载函数

    有一定后端知识的同学都知道在C++和Java中都存在函数重载,

  而JavaScript中却不存在函数重载,如果出现了,后者会把前者覆盖。而且函数声明会提升。

思维训练:有一个人花了800元买了一个游戏账号,又以900元卖出去,然后以1000元买回来,以1100卖出去,请问:这个人赚了多少钱?

5.Javascript中声明的name变量的数据类型会被自动转成字符

  1. var name=10;
  2.  
  3. console.log(typeof name)

 显示结果为 string。

在window中有name属性--window.name为字符型。当我们声明name并赋值时,只不过是给window的name属性赋值而已,改变不了name的数据类型

JS中有趣的知识的更多相关文章

  1. js中有趣的闭包(closure)

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

  2. js中的对象知识总结

    文章目录: 1. 比较两个对象是否相等 1. 比较两个对象是否相等 通过===运算符,只有在两个变量指向同一个对象时才返回true,否则返回false.要想比较两个对象中的内容是否相等,需要利用遍历对 ...

  3. JS中有趣的内置对象-JSON

    前言 在以前的web开发中,我们多数选择纯文本或XML作为我们的提交的数据格式,大多数是XML,少数纯文本.其实从AJAX(Asynchronous JavaScript and XML)的命名我们也 ...

  4. js中实现杨辉三角

    实现效果:杨辉三角 即: 提示用户输入要实现的杨辉三角行数: 请输入杨辉三角的行数: 8 代码实现后的效果如下: 1 1.1 1.2.1 1.3.3.1 1.4.6.4.1 1.5.10.10.5.1 ...

  5. js中函数的一些理论知识

      函数的一些理论知识 1. 函数:                执行一个明确的动作并提供一个返回值的独立代码块.同时函数也是javascript中的一级公民(就是函数和其它变量一样). 2.函数的 ...

  6. Vue.js中Directive知识

    近期所学的Vue.js这个MVVM前端技术缓解了我一直愁于前后端开发杂糅所带来的痛苦.今天就来说说关于Vue.js里面的Directive知识. Directive Directive看上去虽然和An ...

  7. js中错误处理的相关知识

    错误bug是指程序执行过程中,导致程序无法正常执行的情况. 后果:程序会强行中断退出:     错误处理:                即使程序出现错误,也保证程序不异常中断的机制. 一般的使用的代 ...

  8. 二、js中基础知识

    该篇文章主要是强化一下自己javaScript的基础,让写代码变得更轻松些.基础好的请忽略.    JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解 ...

  9. 谈一谈原生JS中的【面向对象思想】

           [重点提前说:面向对象的思想很重要!]         最近开始接触学习后台的PHP语言,在接触到PHP中的面向对象相关思想之后,突然想到之前曾接触的JS中的面向对象思想,无奈记性太差, ...

随机推荐

  1. Algorithms4th 1.1.25 欧几里得算法——数学归纳法证明

    欧几里得算法的自然语言描述 计算两个非负整数p和q的最大公约数: 若q是0,则最大公约数为p.否则将p除以q得到余数r,p和q的最大公约数即为q和r的最大公约数. 数学归纳法证明 基础步骤: 若q = ...

  2. go语言从例子开始之Example32.打点器

    定时器 是当你想要在未来某一刻执行一次时使用的 - 打点器 则是当你想要在固定的时间间隔重复执行准备的.这里是一个打点器的例子,它将定时的执行,直到我们将它停止. Example: package m ...

  3. wait()和sleep()、sleep()和yield()的区别

    wait()和sleep()的区别主要表现在一下几个方面: 原理不同.sleep()方法是Thread类的静态方法,是线程用来控制自身流程的.它会使线程暂停执行一段时间,把执行机会让给其他线程,等到时 ...

  4. Sass-unitless()函数

    unitless() 函数相对来说简单明了些,只是用来判断一个值是否带有单位,如果不带单位返回的值为 true,带单位返回的值为 false: >> unitless(100) true ...

  5. 如何改变string中的字符值?

    string本身是不可变的,因此要改变string中字符,需要如下操作: str := “hello world” s := []byte(str) s[] = ‘o’ str = string(s) ...

  6. 清理maven缓存

    原文:https://blog.csdn.net/viplisong/article/details/82963989maven下载失败后会缓存文件,可能导致下次下载失败.通过以下两步清理 1.cd ...

  7. JSP相关学习

    动态页面技术(JSP/EL/JSTL) <!-- jsp的三种脚本方式 --> <% int i = 5; //这是单行注释 /*这是多行注释*/ %> <%=i%> ...

  8. SpringBoot---概述

    1.概述 1.1.SpringBoot解决什么问题? 1.1.1.配置---> 自动化配置 1.1.2.依赖---> SpringBoot提供了一系列的Start POM,整合各项功能的时 ...

  9. nyoj 762:第k个互质数

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=762 直接给代码好了,容斥原理具体看<组合数学> #include<bi ...

  10. 拦截Restful API的三种方式

    如题, 方式有三种. (1). 过滤器filter javaEE规范 (2). 拦截器interceptor springmvc提供 (3). 切片 aspect 一. Filter使用示例 impo ...