1、数据类型:原始类型(primitive type) 和对象类型(object type)

原始类型包括数字、字符串和布尔值;
除数字、字符串、布尔值、null(空)、undefined(未定义),其它都属于对象类型。
也可以分为可变(mutable)类型和不可变(immutable)类型。数字、字符串、布尔值、null和undefined属于不可变类型。
2、
非数字值用NaN表示,函数isNaN()用于判断一个值是否是非数字,如果参数是NaN或非数字值,返回true。
函数isFinite()在参数不是NaN、Infinity(无穷大)、-Infinity(负无穷大)的时候返回true。
3、全局对象
包括全局属性(全局变量属于全局属性)、全局函数、构造函数、全局对象。
 全局函数如isNaN()、parseInt()等,构造函数如Date()、RegExp()、String(),
全局对象如Mah、JSON。
新页面加载时将会创建一个新的全局对象,并定义初始属性,如上。
4、包装对象
定义:存取字符串、数字或布尔值的属性时创建的临时对象称为包装对象。
null、undefined没有包装对象,访问它们的属性会造成一个类型错误。
字符串、数字和布尔值可以通过String()、Nmber()和Boolean()构造函数来显式的创建包装对象。
一般情况下,比如我们在访问字符串的属性时,都是通过 "." 操作符来访问,如下:
 
 
 
2
2
 
 
 
 
 
1
console.log("hello world".length);
2
console.log("this a string".indexOf("a"));
 
 
其实在调用这些方式或属性时js内部隐式的为我们创建了一个包装对象。如下:
 
 
 
2
2
 
 
 
 
 
1
console.log(new String("hello world").length);
2
console.log(new String("this a string").indexOf("a"));
 
 
隐式和显式的区别:
两者并不相等。如下:
 
 
 
4
4
 
 
 
 
 
1
var a1 = "test",
2
   a2=new String("test");
3
console.log(a1 == a2);//true
4
console.log(a1 === a2);//false
 
 
隐式创建的包装对象,在使用完后之后就会被抛弃了,如:
 
 
 
2
2
 
 
 
 
 
1
test.a = "hello"; //隐式创建包装对象,用完即时销毁
2
console.log(test.a); //undefined  新创建一个包装对象,未初始化
 
 
用处:
有的浏览器性能不是很好,比如说低版本IE,当频繁处理字符串、数字时,效率会很低。
所以有时不如直接显式创建包装对象,防止浏览器过多地创建隐式的包装对象,提升性能。
 
 
 
4
4
 
 
 
 
 
1
//不推荐使用种方法
2
var example = "this is a example";  
3
//推荐使用这种方法,提升性能。
4
var example2 = new String("this is a example");
 
 
5、类型转换
(1)显式类型转换
可以通过Boolean()、Number()、String()或Object()函数。
(2)对象转换为原始值
所以对象都继承了toString()和valueOf()两个转换方法。
对象到字符串的转换步骤
  • 如果对象具有toString()方法,则调用这个方法。如果它返回一个原始值,这个值转换为字符串。
  • 如果对象没有toString()方法,或者这个方法并不返回一个原始值,那么javascript会调用valueOf()方法,如果存在这个方法,javascript会调用它,如果它返回一个原始值,这个值转换为字符串。
  • 否则,javascript无法从toString()或valueOf()获得一个原始值,因此它将抛出一个类型错误异常。

对象到数字的转换步骤

    与对象到字符串转换做相同的事情,只是它会首先尝试使用valueOf()方法。
如果将对象和一个原始值比较,则转换遵循对象到原始值的转换方式进行。
(3)在做算术运算的时候,如果其中一个操作数是对象,javascript会将对象转换为原始值,不管得到的原始值是否直接使用,都不会进一步转换为数字或字符串。
如:
 
 
 
5
5
 
 
 
 
 
1
var now = new Date(); 
2
typeof(now + 1); //将日期转换为字符串 (字符串的拼接)
3
typeof(now - 1); //使用对象到数字的转换
4
now == now.toString() //true:隐式和显式的字符串转换
5
now > (now - 1) //将日期转换为数字(隐式)
 
 
默认情况下,日期对象在转换为原始值时,会优先使用toString()方法(隐式)。在对日期对象执行加法运算时,要显式的将日期对象转换为数字,才能运算。
6、作用域
(1)变量作用域
全局变量拥有全局作用域。
在函数体内,局部变量的优先级高于同名的全局变量。
(2)函数作用域
在函数内声明的所有变量在函数体内始终是可见的。
(3)属性变量
使用var声明一个变量时,创建的这个属性是不可配置的。无法通过delete运算符删除。
没有使用严格模式给一个未声明的变量赋值,javascript会自动创建一个全局变量,这种方式创建的变量是可配置属性,可以删除它们:
 
 
 
6
 
 
 
 
 
1
var trueval = 1; //声明一个全局变量
2
fakeval = 2; //创建一个全局变量
3
this.fackval2 = 3; //同上
4
delete trueval //false 变量没有被删除
5
delete fakeval //true 变量被删除
6
delete this.fackval2 //true 变量被删除
 
 
 

span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }.cm-searching {background: #ffa; background: rgba(255, 255, 0, .4);}.cm-force-border { padding-right: .1px; }@media print { .CodeMirror div.CodeMirror-cursors {visibility: hidden;}}.cm-tab-wrap-hack:after { content: ""; }span.CodeMirror-selectedtext { background: none; }.CodeMirror-activeline-background, .CodeMirror-selected {transition: visibility 0ms 100ms;}.CodeMirror-blur .CodeMirror-activeline-background, .CodeMirror-blur .CodeMirror-selected {visibility:hidden;}.CodeMirror-blur .CodeMirror-matchingbracket {color:inherit !important;outline:none !important;text-decoration:none !important;}.CodeMirror-sizer {min-height:auto !important;}
-->

li {list-style-type:decimal;}.wiz-editor-body ol.wiz-list-level2 > li {list-style-type:lower-latin;}.wiz-editor-body ol.wiz-list-level3 > li {list-style-type:lower-roman;}.wiz-editor-body blockquote {padding: 0 12px;}.wiz-editor-body blockquote > :first-child {margin-top:0;}.wiz-editor-body blockquote > :last-child {margin-bottom:0;}.wiz-editor-body img {border:0;max-width:100%;height:auto !important;margin:2px 0;}.wiz-editor-body table {border-collapse:collapse;border:1px solid #bbbbbb;}.wiz-editor-body td,.wiz-editor-body th {padding:4px 8px;border-collapse:collapse;border:1px solid #bbbbbb;min-height:28px;word-break:break-word;box-sizing: border-box;}.wiz-hide {display:none !important;}
-->

js权威指南学习笔记(一)类型、值和变量的更多相关文章

  1. js权威指南---学习笔记02

    1.JS只有函数作用域,没有块级作用域这个概念: 它有一个特性——声明提前:在同一个函数中不同位置声明的变量,都被提前在函数开始的时候,执行声明操作:在原先位置执行赋值操作: 2.声明的全局变量,相当 ...

  2. js权威指南---学习笔记01

    1.当函数赋值给对象的属性时,就变为了方法:2.被零整除不报错,只会返回无穷大(Infinity)或者负无穷大.例外:零除以零等于非数字(NaN).3.NaN与任何值都不相等! 4.Javascrip ...

  3. js权威指南学习笔记(四)对象

    1.创建对象 (1).通过对象直接量的方式创建 说明:对象直接量是由若干名/值对组成的映射表,名/值对中间用冒号分隔,名/值对之间用逗号分隔,整个映射表用花括号括起来. 如:       5 5   ...

  4. js权威指南学习笔记(二)表达式与运算符

    1.数组初始化表达式 数组直接量中的列表逗号之间的元素可以省略,这时省略的空位会填充undefined.如:       2 2           1 var arr = [1,,,,,6]; 2 ...

  5. js权威指南学习笔记(三)语句

    1.声明语句 如果用var声明的变量没有初始化,那么这个变量的值会被初始化为undefined. 函数声明语句的语法如下:       4 4           1 console.log(func ...

  6. JavaScript 权威指南-学习笔记(一)

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...

  7. HTTP权威指南-学习笔记

    目录 HTTP权威指南-学习笔记 HTTP: Web的基础 URL与资源 HTTP报文 连接管理 HTTP结构 Web服务器 代理 缓存 集成点: 网关,隧道及中继 Web机器人 识别,认证与安全 客 ...

  8. 《JS权威指南学习总结》

    JS权威指南学习总结:http://www.cnblogs.com/ahthw/category/652668.html

  9. 《JS权威指南学习总结--开始简介》

    本书共分成了四大部分: 1.JS语言核心 2.客户端JS 3.JS核心参考 4.客户端JS核心参考 其中 <JS权威指南学习总结--1.1语法核心> 是:第一部分JS语言核心 各章节重点 ...

随机推荐

  1. print高亮显示

    显示颜色格式:\033[显示方式;字体色;背景色m......[\033[0m] ------------------------------------------- --------------- ...

  2. 进阶篇:4.2)DFA设计指南:优化装配工序

    本章目的:针对每一个装配工序,运用DFA进行优化. 1.前言 工序的优化在产品的精简之后. 这个是作者的实际做完DFA后得出的结论.原因倒是很简单,一个精密的产品,哪怕只是优化了一个零件,对整体的装配 ...

  3. CF1012B Chemical table 题解【二分图】【构造】

    有意思的网格图转化.CF Div.1 还是挺有难度的. 注:由于本题有较完美的中文题面,所以不贴英文题面. 英文题面 题目描述 Innopolis 大学的教授正努力研究元素周期表.他们知道,有 \(n ...

  4. vue.js学习笔记(一)——vue-cli项目的目录结构

    vue.js是一套构建用户界面的渐进式框架.vue采用自底向上增量开发的设计.vue的核心库只关心视图层,非常容易学习,非常容易与其它库和已有项目整合.vue完全有能力驱动采用单文件组件和vue生态系 ...

  5. netsh命令操作防火墙

    这里的netsh命令操作防火墙主要是在Windows 7及以上版本,以示例说明: 1.防火墙入方向添加一条规则,规则名字:RDP,协议tcp,动作为允许,端口号3389:简而言之,就是允许其他机器远程 ...

  6. JSON 请求太大,无法反序列化。

    在post请求中数据太大导致报500错误.错误提示 JSON 请求太大,无法反序列化. 在config中加 <system.web.extensions> <scripting> ...

  7. python3 zip压缩

    参考: https://docs.python.org/3/library/zipfile.html https://zhidao.baidu.com/question/149840976436638 ...

  8. Linux-文件目录类命令

    l 文件目录类 pwd 指令 基本语法 pwd (功能描述:显示当前工作目录的绝对路径) 应用实例 案例:显示当前工作目录的绝对路径 ls指令 基本语法 ls [选项] [目录或是文件] 常用选项 - ...

  9. java练习题:现给出二组字符串,比较他们看是否相等

    import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import jav ...

  10. blender

    Blender 是一款开源的跨平台全能三维动画制作软件,提供从建模.动画.材质.渲染.到音频处理.视频剪辑等一系列动画短片制作解决方案. 教程 https://www.bilibili.com/vid ...