JavaScript入门(一)

JavaScript是一门挺神奇的语言,作为一个写惯了OC的iOS客户端,刚一上手感觉人生一下子就黯淡了。由于公司正在进行React Native的技术学习,JavaScript成为了不可跨越的一关。React Native现在已经基本熟悉了,但是回过头来突然发现自己这几个月从来没系统的学过JavaScript。

概述

先提前说一句,本章不会涉及过多的JavaScript重点知识,只是简单介绍JavaScript的一些基本认识。

JavaScript是一种解释型的语言,什么是解释型,就是你写完代码之后,运行时需要一个‘解释器’帮你将代码翻译成计算机识别的机器码。与之对应的编译型语言,像OC、C++等,都是依赖编译器,在计算机运行代码前,会进行编译,其实就是我们平时常用的cmd+B(Xcode)过程。

另外,其实JavaScript和Java除了名字里都有Java这四个字母,基本就没有共同点了,JavaScript更不是Java的脚本版语言,听说是当时命名时,Java比较火,所以活用一下IP,可能会更方便宣传。实际上,对我而言,JavaScript比Java好学倒是真的。

ECMAScript标准可以说是控制JavaScript的各个方面,再次不过多介绍,有兴趣自行百度学习,此处可能涉及ES 6相关的知识。

数据类型与变量

我们都知道的一点就是JavaScript是一种弱类型语言,有时候处理数据的时候不需要指定类型,JavaScript会自己判断其类型,但有时候JavaScript的推断结果会与我们预期的结果不一致,所以灵活的表示类型,不仅安全而且高效。常用的数据类型:数值、文本和布尔。

  • 数值,分为整数和小数(浮点),至于具体的数值范围和精度,就目前阶段而言,并没有什么用,反正一般没有需要科学计算的业务。

  • 文本数据,说白的就是放在单引号或双引号之间的字符串,需要注意的就是,JavaScript里,单引号和双引号,其实没有区别,只是使用的时候需要统一,'Hello" 是无效的,另一个有效的写法就是"Hello wor'd",但是"Hello wor"d"是无效的,其实需要在字符串中显示引号时一般都是使用转义字符如:' 和 ",其他转义字符不过多介绍,与其他语言基本是一致的。

  • 布尔数值,只有两个值,是(true)和 否(false),一般配合判断语句使用

  • 变量,一提到这两个字,大家感到熟悉之余肯定会想到与之对应的常量,那么恭喜你,因为JavaScript没有严格意义上的常量,ES 6之后const可以看作常量声明。JavaScript中使用var定义变量,这一点和swift中很像,有人可能会猜想let可能是在JavaScript中用于定义常量的,但很可惜,JavaScript中虽然有let关键字,但却不是用于常量声明。
    var — 声明变量的主要关键字,var声明的变量之后,将会告诉计算机保留一部分内存用于存储变量数据。在进行声明时可以不指定数据类型,JavaScript可以自行推断。

var number = 1;//number此处是数值型
var number = '1';//number此处是文本数据

另外,值得注意的一点是,var 定义的变量具有变量提升的效果,如下:

 function test(){
    for(i in someArray){
      //do something
      var i ;
    }
      //此处可以访问到i,并且程序不会报错,可以正常执行循环
}

let — ES 6之后定义变量的关键字,用于定义块变量,类似于局部变量,而let与var的不同,如下所示

function test (){
    for(var i in someArray){
       let j = '22';
    }
    //此处仍可以访问到变量i,但是访问不到变量j
}

const — ES 6 之后另一种定义变量的关键字,类似于定义常量,被const定义的变量不可被修改且定义时必需赋值。

    const test = 'test';//正确
    const test1;//错误
    test = 'another';//错误

关于计算

数值的数学运算和逻辑运算,与其他语言无异。
关于文本数据,在进行合并时使用符号‘+’。
值得注意的是,当进行数值和文本混合计算时,使用符号‘+’进行连接,但由于JavaScript自动推断类型的特点,某些情况下会存在差异。

var mix = 'my name is'+123;//结果为'my name is 123',string类型
var mix1 = '1'+1;//结果为'11',string类型
var mix2 = 1+2+'abc';//结果为'3abc',string类型
var mix3 = 'abc'+1+2;//结果为'abc12',string类型

关于数值和文本类型转换

两者之间的转换可以通过转换函数实现
1. parseInt( )
parseInt()函数,将一个文本数据转换为int类型的数据,也就是整型,该函数可以传入两个参数,第一个参数为要转换的文本,第二个参数为要转换的进制,注意如果不给第二个参数,JavaScript会推断转换的数值类型,也就是进制,并不是默认为十进制。

parseInt("10");      //返回 10
parseInt("19",10);    //返回 19 (10+9)
parseInt("11",2);      //返回 3 (2+1)
parseInt("17",8);      //返回 15 (8+7)
parseInt("1f",16);    //返回 31 (16+15)
parseInt("010");        //未定:返回 10 或 8

如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
如果 string 以 0 开头,parseInt() 的把其后的字符解析为八进制或十六进制的数字。
如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
如果string不为数值,则返回NaN(Not a Number)。
2.parseFloat( )
parseFloat()函数,将一个文本数据转换为float类型的数据,也就是浮点型,该函数可传入一个参数,为要转换的文本。
parseFloat() 将它的文本参数解析成为浮点数并返回。如果在解析过程中遇到了正负号(+ 或 -)、数字 (0-9)、小数点,或者科学记数法中的指数(e 或 E)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数。若想取浮点数的整数部分,则使用parseInt()方法。

parseFloat("23.33")       //返回 23.33
parseFloat("40 a")        //返回 40

3.isNaN( )
isNaN( )函数,用于检查其传入参数是否是非数字值。
如果参数是特殊的非数字值 NaN(或者能被转换为这样的值),返回的值就是 true。如果参数是其他值,则返回 false。总而言之,参数要是不是数值或者不可转换为数值,就返回true,反之,返回false。

  isNaN(1);     //false
  isNaN("1");   //false
  isNaN("abc"); //true
  isNaN(0X1f);  //false

4.toString( )
toString( )函数,其中一种用法是可以将数值转换为文本,但该函数不是全局函数,需要数值对象进行调用。

    var number=12;
    number.toString();    // 12
    number.toString(2);   // 1100
    number.toString(8);   // 14
    number.toString(10);  // 12
    number.toString(16);  // c

关于判断与循环

与C语言基本一致,不需要重复学习。值得注意的有两点:

  • ‘==’与‘===’的区别
    虽然两种都用于比较,但是功能并不完全相同,如果将==视为等于,那么 ===可以视为严格等于。
    当两个对象或类型进行==比较时,若两者类型不同,则想转换为统一类型在进行比较,而对于===来说,类型不同,就一定不相等。
1 == '1'   //true
1 === '1'  //false
null == undefined // true
null === undefined // false
1 == true   //true
1 === true  //false
  • forin 和 forof
    forin和forof是两种循环的写法(格式),示例如下
for (let i of ['1a','2b','3c']) {
    //此处读到的i为数据。
  }

  for (var i in ['1a','2b','3c']) {
    //此处读到的i为数组下标。
  }

另外,第二个循环中使用了var,由于var变量提升的特性,在第二个for循环之外,还是可以读到var声明的变量,所以,若是所处的JavaScript环境支持ES 6,则在进行for循环时,尽量使用let定义。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容