js程序设计01——基本概念
本文为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——基本概念的更多相关文章
- 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB
走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...
- Node.js 教程 01 - 简介、安装及配置
系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...
- .NET的堆和栈01,基本概念、值类型内存分配
当我们对.NET Framework的一些基本面了解之后,实际上,还是很有必要了解一些更底层的知识.比如.NET Framework是如何进行内存管理的,是如何垃圾回收的......这样,我们才能写出 ...
- 深入浅出Win32多线程程序设计之基本概念
一.深入浅出Win32多线程程序设计之基本概念[转] 引言 从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓 ...
- js程序设计02——变量、作用域问题
首先,ECMAScript中的数据类型分为基本类型.引用类型,基本类型的访问操作是按值的.引用类型的值是保存在内存中的对象,操作对象时,实际上操作的是对象的引用,而非对象自身.“javascript高 ...
- 《JavaScript高级程序设计》 -- 基本概念(一)
之前看过好几遍<JavaScript高级程序设计>这一书,但是始终没有完完整整的看过一遍.从现在开始我会把它完整的啃一遍,每章节都记录笔记,自己的心得,加油! 由于前三章的内容比较简单,因 ...
- js面向对象学习 - 对象概念及创建对象
原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...
- [程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)
本系列导航 本系列其他文章目录请戳这里. 1.名字.约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是“对象”,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有 ...
- javascript高级编程笔记01(基本概念)
1.在html中使用JavaScript 1. <script> 元素 <script>定义了下列6个属性: async:可选,异步下载外部脚本文件. charset:可选, ...
随机推荐
- cms替换主页的步骤
cms替换主页的步骤 .先做好静态页面: .在D:\wamp\www\phpcms\install_package\phpcms\templates文件夹下建新的文件夹tianqiwangluo(项目 ...
- 使用Intellij idea开发
使用IntelliJ IDEA开发SpringMVC网站(一)开发环境 使用IntelliJ IDEA开发SpringMVC网站(二)框架配置 使用IntelliJ IDEA开发SpringMVC网站 ...
- Unicode explorer
It can be cumbersome to work out some of the details of this by hand, so you can use the little Java ...
- 剑指offer题目41-50
面试题41:和为S的连续正整数序列 import java.util.ArrayList; public class Solution { public ArrayList<ArrayList& ...
- 阿里巴巴Json工具-Fastjson讲解
Fastjson是阿里巴巴公司开源的速度最快的Json和对象转换工具,一个Java语言编写的JSON处理器. 1.遵循http://json.org标准,为其官方网站收录的参考实现之一.2.功能qia ...
- three.js 源码注释(四十四)Light/DirectionalLight.js
/** * * DirectionalLight方法 根据设置灯光的颜属性color, 强度属性intensity创建平行光光源. * DirectionalLight 对象的功能函数采用定义构造的函 ...
- Eclipse: Launch failed. Binary not found
最近写demo出现这个问题, 然后上网搜了一会儿, 最后发现只要点击eclipse上的锤子图标就可以了.
- android text
"@you bang--- go on -------" 需要做分享内容,前面有段格式固定写死,同时颜色为灰色:后面的内容可以编辑,颜色为黑色,同时支持多行 有人用textview ...
- Spring AOP小结
一. AOP介绍 AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP ...
- 5.4-5.8webstorm css
关于使用css3 动画完成牛顿摆球效果: 使用的规则为@keyframes,不过目前的浏览器都不支持该规则. Firefox 支持替代的 @-moz-keyframes 规则. Opera 支持替代的 ...