本文为js高级程序设计学习笔记,笔记中不乏本人学习js的一些心得demo,喜欢的朋友可以直接参考原书“javascript高级程序设计”,写本笔记的目的是对js中容易出错、不易理解的地方作个笔记,以免后期继续踩坑。

1、语法

  • 区分大小写:比如typeof用于测试数据类型,不同于typeOf,一个func完全可以定义为typeOf
  • 标识符:首字符必须是字母、下划线或$,之后可以是数字、字母、下划线或$;标识符不能使用系统关键字及保留字,比如var、true、false、null、let等
  • 严格模式:

严格模式是ECMAScript 5中引入的概念,是为js定义解析以及执行模型的一种机制,也是为了兼容旧版本的ECMAScript版本而引入的,就是一种编译指示,可以确定ECMAScript 3版本编译运行时的一些不确定行为。使用"use strict",方法如下:

function say(){
"use strict";
console.log("hello strict mode");
} say();

2、变量

所有未经初始化的变量始终为undefined,不论变量类型:

function say(){
var message = "hello message";
}
say();
alert(message); //message未定义为undefined

但是如果省略了var关键字,则message自动上升为全局变量,不会报错:

function say(){
message = "hello message";
}
say();
console.log(message);

结果:

变量声明初始化允许同时进行,比如:

var m1 = "1",m2 = "2",m3 = [1,2,3];
console.log(m1);
console.log(m2);
console.log(m3);

3、数据类型

ECMAScript 5定义js有5中基本类型+1种复杂数据类型(引用类型),基本类型:Undefined、Null、Boolean、Number、String,复杂类型:Object

其中typeof操作符是用来测试数据类型的,typeof的返回值可以是如下几种:

“undefined”——唯一的Undefined类型值,表示“未定义”;
“boolean”——对于Boolean的true or false返回;
“string”——字符串返回;
“number”——数值类型值返回;
“object”——Object类型或者Null类型均返回;
“function”——函数返回;

下面是简单测试:

var m1 = "message",m2 = true,m3 = 98,m4,m5 = {},m6 = null,m7 = function(){};

console.log(typeof m1);
console.log(typeof m2);
console.log(typeof m3);
console.log(typeof m4);
console.log(typeof m5);
console.log(typeof m6);
console.log(typeof m7);

Boolean类型的字面值true和false是区分大小写的,所有数据类型均可通过Boolean()转换函数转换为Boolean类型,对于Number类型,任何非零(包括无穷大)转换为true,0和NaN转换为false;对于Object类型来说,转换为true,null转换为false

关于NaN:

NaN(Not a Number)即非数值,是一个特殊数值,NaN有2个特点:

  • 任何涉及NaN的操作都会返回NaN
  • NaN与任何值都不相等,包括NaN本身

关于NaN的测试如下:

console.log(NaN / 10);    //NaN
console.log(NaN / 0);      //NaN
console.log(NaN == NaN);    //false
console.log(isNaN(NaN));    //true
console.log(isNaN(""));    //false
console.log(isNaN(12));    //false
console.log(isNaN("awd"));    //true
console.log(isNaN("awd12"));    //true
console.log(isNaN("12awd"));    //true
console.log(isNaN(null));    //false
console.log(isNaN({}));      //true  
console.log(isNaN({valueOf:function(){      //false,如果是对象则调用其valueOf方法,查看返回是否匹配NaN
return -1;
}}));
console.log(isNaN({valueOf:function(){      //true
return "awdw";
}}));

关于Number()函数:

Number()函数用于将一个非数值转换为数值类型,Boolean直接返回1或0,null返回0,undefined返回NaN,如果是字符串:空字符串返回0,非空返回去除前导0的字符值,比如"011"返回11,如果非数值字符串返回NaN,比如"this is test"返回NaN;如果是对象,则调用对象的valueOf方法返回。

关于Object类型:

创建:

var o = new Object();

Object的每个实例都有如下属性和方法:

  • constructor:保存着用于创建当前对象的函数
  • isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
  • hasOwnProperty(propertyName):用于检查给定的属性是否在当前对象实例中
  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in 语句枚举
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
  • toString():返回对象的字符串表示
  • valueOf():返回对象的字符串、数值或布尔值表示

4、函数类型

ECMAScript的函数支持不定参数,实际上通过arguments对象即可直接获取请求的参数,函数定义时可以不用指定参数,使用时也可以传入任意数量参数:

function say(){
for(var i=0,len=arguments.length;i<len;i++){
console.log(arguments[i]);
}
} say(12,"343","1231");

function say2(name,age){
console.log(name);
console.log(name == arguments[0]);
console.log(age);
console.log(age == arguments[1]);
} say2("admin",23);

ECMAScript的函数不支持重载,如果定义了2个同名函数,则第二个会覆盖第一个函数:

function say(){
console.log(1111);
} say();      //2222 function say(){
console.log(2222);      
} say();      //2222

js程序设计01——基本概念的更多相关文章

  1. 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB

    走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...

  2. Node.js 教程 01 - 简介、安装及配置

    系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...

  3. .NET的堆和栈01,基本概念、值类型内存分配

    当我们对.NET Framework的一些基本面了解之后,实际上,还是很有必要了解一些更底层的知识.比如.NET Framework是如何进行内存管理的,是如何垃圾回收的......这样,我们才能写出 ...

  4. 深入浅出Win32多线程程序设计之基本概念

    一.深入浅出Win32多线程程序设计之基本概念[转] 引言 从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓 ...

  5. js程序设计02——变量、作用域问题

    首先,ECMAScript中的数据类型分为基本类型.引用类型,基本类型的访问操作是按值的.引用类型的值是保存在内存中的对象,操作对象时,实际上操作的是对象的引用,而非对象自身.“javascript高 ...

  6. 《JavaScript高级程序设计》 -- 基本概念(一)

    之前看过好几遍<JavaScript高级程序设计>这一书,但是始终没有完完整整的看过一遍.从现在开始我会把它完整的啃一遍,每章节都记录笔记,自己的心得,加油! 由于前三章的内容比较简单,因 ...

  7. js面向对象学习 - 对象概念及创建对象

    原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...

  8. [程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)

    本系列导航 本系列其他文章目录请戳这里. 1.名字.约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是“对象”,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有 ...

  9. javascript高级编程笔记01(基本概念)

    1.在html中使用JavaScript 1.  <script> 元素 <script>定义了下列6个属性: async:可选,异步下载外部脚本文件. charset:可选, ...

随机推荐

  1. cms替换主页的步骤

    cms替换主页的步骤 .先做好静态页面: .在D:\wamp\www\phpcms\install_package\phpcms\templates文件夹下建新的文件夹tianqiwangluo(项目 ...

  2. 使用Intellij idea开发

    使用IntelliJ IDEA开发SpringMVC网站(一)开发环境 使用IntelliJ IDEA开发SpringMVC网站(二)框架配置 使用IntelliJ IDEA开发SpringMVC网站 ...

  3. Unicode explorer

    It can be cumbersome to work out some of the details of this by hand, so you can use the little Java ...

  4. 剑指offer题目41-50

    面试题41:和为S的连续正整数序列 import java.util.ArrayList; public class Solution { public ArrayList<ArrayList& ...

  5. 阿里巴巴Json工具-Fastjson讲解

    Fastjson是阿里巴巴公司开源的速度最快的Json和对象转换工具,一个Java语言编写的JSON处理器. 1.遵循http://json.org标准,为其官方网站收录的参考实现之一.2.功能qia ...

  6. three.js 源码注释(四十四)Light/DirectionalLight.js

    /** * * DirectionalLight方法 根据设置灯光的颜属性color, 强度属性intensity创建平行光光源. * DirectionalLight 对象的功能函数采用定义构造的函 ...

  7. Eclipse: Launch failed. Binary not found

    最近写demo出现这个问题, 然后上网搜了一会儿, 最后发现只要点击eclipse上的锤子图标就可以了.

  8. android text

    "@you bang--- go on -------" 需要做分享内容,前面有段格式固定写死,同时颜色为灰色:后面的内容可以编辑,颜色为黑色,同时支持多行 有人用textview ...

  9. Spring AOP小结

    一. AOP介绍 AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP ...

  10. 5.4-5.8webstorm css

    关于使用css3 动画完成牛顿摆球效果: 使用的规则为@keyframes,不过目前的浏览器都不支持该规则. Firefox 支持替代的 @-moz-keyframes 规则. Opera 支持替代的 ...