Отличия между SP-XML Script и JavaScript
Необходимо понимать, что SP-XML Script и JavaScript – совершенно разные языки, хотя и похожие синтаксически, и имеющие некоторые схожие объекты и функции.
Ниже приведены основные различия между двумя языками.
Типы данных
SP-XML Script по идеологии типов данных находится ближе к VBScript. Строка и дата – скалярные значения, а не объекты. Integer и real – разные типы. String и Date также поддерживаются как объекты, но это сделано для облегчения миграции кода с JavaScript.
В SP-XML Script строки являются бинарно-совместимыми. В них можно хранить как текст так и бинарные данные. Текст при этом хранится в кодировке, заданной в приложении (как правило utf-8). С одной стороны это дает удобство работы с бинарными данными, с другой – затрудняет посимвольную обработку строк. Например, функция StrLen() возвращает длину строки в байтах, а StrCharCount() – в символах. Другой пример: вызов StrLeftRange( str, 1 ) нельзя использовать для получения первого символа в строке, необходимо использовать StrLeftCharRange( str, 1 ).
Тип данных для просто даты и даты со временем не различаются. Дата может как содержать время так и не содержать его.
Дата и время в памяти хранятся в структурированном виде (отдельно год, месяц, день и т.д. в виде чисел), без привязки к глобальному времени. Часовой пояс также хранится отдельно. Этот принцип может быть нарушен, если дата сохранятся в базе данных с хранилищем на SQL, где будет осуществлено преобразование к местному типу данных и обратно.
Объект может использоваться как объект, либо может использоваться его скалярное значение, если объект его поддерживает. Например, поле в XML-документе является объектом, но имеет скалярное значение (string, integer и т.д.). При выполнении сравнения, арифметически операциях, преобразовании к строке, объект преобразуется к скалярному значению.
В SP-XML Script используется только строгое сравнение. Undefined, null, ‘’, 0, false – это разные значения.
Массивы
Помимо стандартного массива, аналогичного массиву в JavaScript, в SP-XML существует множество других видов массивов, обобщенно называемых абстрактными массивами (аналог enumerators в VBScript).
Цикл for-in
Цикл for-in работает как в JavaScript только по стандартному объекту, обходя имена всех свойств.
Для абстрактных массивов он работает как цикл foreach в VBScript, обходя все значения.
Функции
SP-XML Script исповедует концепцию библиотек с четким разделением на локальные переменные и глобальные переменные внутри библиотеки. Использование функций внутри кода, как в JavaScript, возможно, но не является рекомендуемой техникой.